VC ++ - асинхронный поток - PullRequest
0 голосов
/ 06 мая 2010

Я работаю над проектом VC ++, в котором мое приложение обрабатывает файл из входного пути и генерирует 3 выходных файла "* .DAT" в пути назначения. Я отправлю эти DAT-файлы на целевой сервер. После FTP мне нужно удалить только два выходных .DAT файла в папку. Я могу удалить эти файлы, потому что за этим процессом работает один асинхронный поток. Поскольку поток работает, при удалении он говорит: «Невозможно удалить, файл используется другим человеком».

Мне нужно остановить этот поток и удалить файлы. Несколько файлов также могут быть взяты из входного пути для обработки.

Пожалуйста, помогите мне в решении этой проблемы. Это очень важный вопрос для меня. Пожалуйста, помогите мне как можно скорее.

Ответы [ 2 ]

0 голосов
/ 06 мая 2010

Я не думаю, что сворачивание фонового потока решит вашу проблему.Вы не можете удалить файлы, потому что у вас есть открытый дескриптор этих файлов.Сначала вы должны закрыть ручку.Создайте объект события и поделитесь им между основным потоком и фоновым потоком.Когда фоновый поток завершает отправку файлов через FTP, он должен установить это событие.Ваш главный поток должен дождаться события перед удалением файлов.

Фоновый поток:

SendFiles();
ReleaseResources(); // (might be necessary, depending on your design)
SetEvent( hFilesSentEvent );

Основной поток:

WaitForSingleObject( hFilesSentEvent );
DeleteFiles();
0 голосов
/ 06 мая 2010

Я не думаю, что это проблема с потоками. Вместо этого я думаю, что ваша проблема в том, что Windows не позволит вам удалить файл, у которого все еще есть открытые дескрипторы, ссылающиеся на него. Убедитесь, что вы вызываете <a href="http://msdn.microsoft.com/en-us/library/ms724211(VS.85).aspx" rel="nofollow noreferrer">CloseHandle</a> для дескрипторов файла, который вы хотите удалить первым. Также убедитесь, что любой механизм, который вы используете для передачи по FTP, не имеет открытых дескрипторов для файла, который вы хотите удалить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...