Есть такой код (отдельный поток):
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, а этого может и не случиться до завершение программы

Как мне более правильно организовать мониторинг директории в отдельном потоке?