Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как при уничтожении объекта std::bind закрыть файл? / 11 сообщений из 11, страница 1 из 1
25.04.2018, 16:07
    #39636148
AlekseySQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как при уничтожении объекта std::bind закрыть файл?
Создавая асинхронную задачу, я передаю в нее bind, который внутри себя хранит указатель на файл:
Код: plaintext
1.
2.
3.
4.
std::ifstream* File = new std::ifstream;
ReadFile(std::ifstream * const File, cstring& FileName);
...
AsyncTask* CurrentTask = new AsyncTask(std::bind(ReadFile, File, FileName));



Как при выполнении задачи освободить ресурсы:
Код: plaintext
1.
delete File;



По логике указатель на файл должен жить пока живет bind, но как из него вызвать освобождение памяти указателя?
...
Рейтинг: 0 / 0
25.04.2018, 16:10
    #39636151
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как при уничтожении объекта std::bind закрыть файл?
AlekseySQL,

shared_ptr
...
Рейтинг: 0 / 0
25.04.2018, 16:38
    #39636197
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как при уничтожении объекта std::bind закрыть файл?
AlekseySQLкоторый внутри себя хранит указатель на файл

А должен - ссылку на файл.
Код: sql
1.
2.
3.
4.
std::ifstream File;
ReadFile(std::ifstream& File, cstring& FileName);
....
AsyncTask* CurrentTask = new AsyncTask(std::bind(ReadFile, std::move(File), FileName));


Или вообще убрать File снаружи, оставить как локальную переменную ReadFile.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
25.04.2018, 16:43
    #39636206
AlekseySQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как при уничтожении объекта std::bind закрыть файл?
Dimitry SibiryakovAlekseySQLкоторый внутри себя хранит указатель на файл

А должен - ссылку на файл.
Код: sql
1.
2.
3.
4.
std::ifstream File;
ReadFile(std::ifstream& File, cstring& FileName);
....
AsyncTask* CurrentTask = new AsyncTask(std::bind(ReadFile, std::move(File), FileName));


Или вообще убрать File снаружи, оставить как локальную переменную ReadFile.


Я сначала открываю файл и если я его сделаю локальной переменной передав ссылку, то эта переменная умрет при выходе из функции.
...
Рейтинг: 0 / 0
25.04.2018, 16:44
    #39636208
AlekseySQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как при уничтожении объекта std::bind закрыть файл?
Anatoly MoskovskyAlekseySQL,

shared_ptr

Спасибо! Должно взлететь :)
...
Рейтинг: 0 / 0
25.04.2018, 17:07
    #39636233
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как при уничтожении объекта std::bind закрыть файл?
AlekseySQLЯ сначала открываю файл и если я его сделаю локальной переменной передав ссылку, то эта
переменная умрет при выходе из функции.

И это правильно, если всю работу с файлом производить только внутри функции.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
25.04.2018, 17:13
    #39636236
AlekseySQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как при уничтожении объекта std::bind закрыть файл?
Dimitry SibiryakovAlekseySQLЯ сначала открываю файл и если я его сделаю локальной переменной передав ссылку, то эта
переменная умрет при выходе из функции.

И это правильно, если всю работу с файлом производить только внутри функции.


Так у меня эта задача выполняется асинхронно, т.е. неизвестно через сколько времени. Когда задача начнет выполняться файл уже будет закрыт и ресурсы освобождены...
...
Рейтинг: 0 / 0
25.04.2018, 17:32
    #39636256
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как при уничтожении объекта std::bind закрыть файл?
AlekseySQLТак у меня эта задача выполняется асинхронно, т.е. неизвестно через сколько времени. Когда
задача начнет выполняться файл уже будет закрыт и ресурсы освобождены...
Именно поэтому задача должна самостоятельно открывать файл когда понадобится и
освобождать когда он не нужен. "Снаружи" файл не нужен.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
25.04.2018, 17:48
    #39636268
AlekseySQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как при уничтожении объекта std::bind закрыть файл?
Dimitry SibiryakovИменно поэтому задача должна самостоятельно открывать файл когда понадобится и
освобождать когда он не нужен. "Снаружи" файл не нужен.


В асинхронную часть у меня перенесена только работа с диском, все расчеты делают основные потоки. Так что открытый файл все- таки должен "торчать наружу".
...
Рейтинг: 0 / 0
25.04.2018, 17:52
    #39636272
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как при уничтожении объекта std::bind закрыть файл?
AlekseySQLВ асинхронную часть у меня перенесена только работа с диском, все расчеты делают основные
потоки. Так что открытый файл все- таки должен "торчать наружу".

Зачем? Для чего этот открытый файл нужен кроме как для "работы с диском"?

Опять устраиваешь спагетти. Закукливай задачи.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
25.04.2018, 17:52
    #39636273
AlekseySQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как при уничтожении объекта std::bind закрыть файл?
А можно при вызове функции переместить в нее параметры (не скопировать и не передавать по ссылке, указателю)?

Дело в том, что я хочу unique_ptr хочу передать в функцию, но он позволяет только перемещения.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как при уничтожении объекта std::bind закрыть файл? / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]