Здравствуйте, Аноним, Вы писали:
А>Есть такой код (отдельный поток):
А>А>DWORD WINAPI TrackFolder(LPVOID lpParam)
А>{
А> DWORD dwWaitStatus;
А> HANDLE hWaitHandle;
А> LPTrackParams params = (LPTrackParams)lpParam;
А> hWaitHandle = FindFirstChangeNotification(
А> params->szFolder,
А> params->bSub,
А> FILE_NOTIFY_CHANGE_FILE_NAME);
А>
А> if (hWaitHandle == INVALID_HANDLE_VALUE)
А> ExitThread(GetLastError());
А> while (TRUE)
А> {
А> dwWaitStatus = WaitForSingleObject(hWaitHandle,INFINITE);
А> if (!*(params->bStop))
А> {
А> FindCloseChangeNotification(hWaitHandle);
А> ExitThread(GetLastError());
А> }
А> SendMessage(params->hHost,UWM_NEWFILES,(WPARAM)params->szFolder,0);
А> if ( FindNextChangeNotification(hWaitHandle) == FALSE )
А> {
А> FindCloseChangeNotification(hWaitHandle);
А> ExitThread(GetLastError());
А> }
А> }
А>}
А>
А>Все работает, но вот есть такая неправильность:
А>при установке params->bStop в FALSE в основном потоке работчий поток завершается и освобождает ресурсы только после того, как произойдут какие-нидудь изменения в params->szFolder, а этого может и не случиться до завершение программы
Как мне более правильно организовать мониторинг директории в отдельном потоке?здесь
Для корректного завершения потока мониторинга дериктории в рабочем потоке создайте событие и воспользуйтесь ф-ей WaitForMultipleObjects(), в которую передайте хэнделы события и отслеживаемой директории....
при необходимости в рабочем потоке сбрасывайте событие и соответствующим образом обрабатывайте результат WaitForMultipleObjects...
удачи!