我想弄清楚如何使用FindFirstChangeNotification爲了做一些文件監視(在這種情況下,熱重新加載設置)。我對這個函數返回的內容感到困惑。從文檔中,它創建了「更改通知句柄」。可以,當然。但是,然後「等待......時通知句柄成功」。在這種情況下,什麼是「等待」?什麼是Windows API中的「等待通知句柄」?
1
A
回答
1
在此背景下,「等待」是指等待「變更通知處理」,這是一種HANDLE
可以等待,直到它在信號狀態使用Wait Functions。
的最小的例子是這樣的:
static void MyNotifyDirChange(HWND hwnd, LPCWSTR szPath)
{
HANDLE hWaitNotify = ::FindFirstChangeNotificationW(
szPath, TRUE,
FILE_NOTIFY_CHANGE_FILE_NAME |
FILE_NOTIFY_CHANGE_DIR_NAME |
FILE_NOTIFY_CHANGE_ATTRIBUTES |
FILE_NOTIFY_CHANGE_SIZE |
FILE_NOTIFY_CHANGE_LAST_WRITE |
FILE_NOTIFY_CHANGE_LAST_ACCESS |
FILE_NOTIFY_CHANGE_CREATION |
FILE_NOTIFY_CHANGE_SECURITY);
if (hWaitNotify == INVALID_HANDLE_VALUE)
{
::MessageBoxW(hwnd,
L"FindFirstChangeNotificationW failed.",
nullptr, MB_ICONERROR);
return;
}
::WaitForSingleObject(hWaitNotify, INFINITE);
::MessageBoxW(hwnd, L"Dir change notify.",
L"Notify", MB_ICONINFORMATION);
}
WaitForSingleObject等待直到指定的對象是在信號狀態或超時間隔過去。因爲我已經指定了INFINITE
,它將永遠留在那裏,直到句柄變成信號。當手柄變成信號時,意味着發生了一些事情;目錄中的文件已經改變或者沒有改變。
0
從Wait Functions MSDN上:
等待功能允許一個線程阻塞自己的執行。等待函數不會返回,直到滿足指定的條件。
大部分等待函數(顯着的例外是WaitOnAddress)接受一個或多個句柄,這些句柄決定了從等待中返回的條件。等待句柄意味着將句柄傳遞給這些等待函數之一。通常指的是等待一個對象,這個對象的含義與等待該對象的句柄的含義相同。
Synchronization Objects列出了您可以等待的各種對象:事件,互斥量,信號量和等待定時器;更改和內存資源通知;工作,流程和線程;和(受到一些警告)I/O句柄。
相關問題
- 1. C#等待句柄回調
- 2. 等待句柄和Xamarin格式
- 3. 什麼是等待?
- 4. 鎖定等待/通知的優點是什麼?
- 5. 等待並通知
- 6. 多個進程和等待句柄
- 7. 「句柄」究竟是什麼?
- 8. 什麼是節點句柄?
- 9. 什麼是事件句柄?
- 10. 什麼是句柄? IntPtr
- 11. 什麼是事件句柄?
- 12. 什麼是Trello API中的「addedToBoard」通知?
- 13. 等待句柄和System.Threading.Tasks命名空間
- 14. 披薩,線程,等待,通知。這是什麼意思?
- 15. 如何正確部署等待句柄
- 16. 什麼是C++中的句柄?
- 17. 什麼是Windows的「通知 - 發送」等效物?
- 18. Nativescript中的句柄推送通知
- 19. Groovy的等待/通知
- 20. java.lang.IllegalMonitorStateException等待並通知
- 21. 什麼是等待setSoTimeout
- 22. 什麼是「等待線程」?
- 23. 等待並通知協調
- 24. Twilio IP消息系統:iOS消息客戶端API中的[客戶端句柄通知]的要點是什麼?
- 25. 爲什麼等待,通知和notifyAll是Object類中的方法不像Cloneable
- 26. 什麼是Matlab的有效句柄?
- 27. 檢查是否有等待通知
- 28. 等待並通知問題
- 29. 等待通知在java
- 30. 如何在javascript中等待處理句柄
請參閱WaitForSingleObject和WaitForMultipleObjects。 A * wait *正是它聽起來的樣子;等待發生變化的通知。 –