【发布时间】:2009-02-02 14:36:19
【问题描述】:
所以,问题是:我收到了一些我不想收到的通知。但我不知道我得到它们的文件/目录。有没有办法知道为什么给定的通知被触发?
如果您考虑 ReadDirectoryChangesW,请包含一个有意义的代码示例。
【问题讨论】:
-
使用 ReadDirectoryChangesW 有什么难的?
标签: c++ debugging winapi notifications
所以,问题是:我收到了一些我不想收到的通知。但我不知道我得到它们的文件/目录。有没有办法知道为什么给定的通知被触发?
如果您考虑 ReadDirectoryChangesW,请包含一个有意义的代码示例。
【问题讨论】:
标签: c++ debugging winapi notifications
如果您希望 Windows 告诉您更改了哪些特定文件或子目录,您需要使用 ReadDirectoryChangesW。如果使用完成例程,异步模式相当简单。
另一方面,通过使用稍微复杂的I/O completion ports 方法,您可能会获得更好的性能。我建议下载 Wes Jones 出色的 CDirectoryChangeWatcher 源代码作为起点。他的代码可以帮助您避免几个问题,尤其是在解析 FILE_NOTIFY_INFORMATION 记录时。
【讨论】:
~伪代码
HANDLE handles[MAX_HANDLES];
std::string dir_array[MAX_HANDLES];
for i from 0 to MAX_HANDLES:
h[i] = FindFirstChangeNotification(dir_array[i]...);
nCount = MAX_HANDLES;
ret = WaitForMultipleObjects(handles, nCount ...);
// check if ret returns something between WAIT_OBJECT_0 and WAIT_OBJECT_0+nCount-1
if "so":
ret -= WAIT_OBJECT_0;
cout << "Directory " << dir_array[ret] << " changed" << endl;
见:http://msdn.microsoft.com/en-us/library/ms687025(VS.85).aspx
【讨论】:
看专业的Win32 api新闻组新闻://comp.os.ms-windows.programmer.win32 用于著名的 MS 示例(C 代码)(自 90 年代...)
【讨论】: