[ReadDirectoryChangesW] Доброго всем времени суток. Возник нехитрый вопрос. Устанавливаю слежку за изменениями на диске. Когда возникает очередное событие, пытаюсь с помощью ReadDirectoryChangesW узнать, что же там такое произошло. Но при ее вызове поток замирает. Olly при этом пишет "Running", значит где-то что-то зацикливается. Подскажите, может я где-то ошибся с параметрами? Код (Text): procedure FileWatchingThread(lpParam: pointer); var bWatchSubTree: boolean; dwWaitStatus, dwBytesReturned: DWORD; hDir: DWORD; pMem: PFILE_NOTIFY_INFORMATION; begin while not bCanTerminate do begin dwWaitStatus := WaitForMultipleObjects(1, @dwChangeHandle, false, INFINITE); bWatchSubTree := false; hDir := CreateFile(PChar(szDirectories[dwWaitStatus]), FILE_LIST_DIRECTORY, FILE_SHARE_READ or FILE_SHARE_DELETE, nil, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0); if hDir <> INVALID_HANDLE_VALUE then begin pMem := VirtualAlloc(nil, $4000, MEM_COMMIT or MEM_RESERVE, PAGE_READWRITE); asm int 3 end; if ReadDirectoryChangesW(hDir, pMem, $4000, bWatchSubTree, FILE_NOTIFY_CHANGE_FILE_NAME, @dwBytesReturned, nil, nil) then begin ShowMessage('ReadDirectoryChangesW'); end; VirtualFree(pMem, 0, MEM_RELEASE); CloseHandle(hDir); end; FindNextChangeNotification(dwChangeHandle[dwWaitStatus]); end; end;
slow Спасибо. Глянув на код я понял, что у меня нет ошибок в параметрах. Просто ReadDirectoryChangesW ждет изменений, так же как и WaitForMultipleObjects - получается я ждал одного события двумя функциями, естественно что возникшее событие не доходило до ReadDirectoryChangesW и она начинала ждать другое. Спасибо еще раз, вопрос закрыт.