为什么异步使用ReadDirectoryChangesW?

时间:2009-07-14 17:21:50

标签: windows winapi readdirectorychangesw

我已阅读ReadDirectoryChangesW()的文档并看过CDirectoryChangeWatcher project,但都没有说为什么会想要异步调用它。我知道当前线程不会阻塞,但是,至少对于使用完成端口的CDirectoryChangeWatcher代码,当它调用 GetQueuedCompletionStatus()时, 线程阻塞无论如何(如果没有变化)。

因此,如果我首先在一个单独的线程中同步调用ReadDirectoryChangesW(),我不在乎它是否阻塞,为什么我想要异步调用ReadDirectoryChangesW()

3 个答案:

答案 0 :(得分:5)

当您异步调用它时,您可以更好地控制哪个线程在等待。它还允许您让单个线程等待多个事物,例如目录更改,事件和消息。最后,即使您在首先设置手表的同一个线程中进行等待,它也可以让您控制您愿意等待的时间。 GetQueuedCompletionStatus有一个ReadDirectoryChangesW自身不提供的超时参数。

答案 1 :(得分:1)

如果您需要调用线程不阻塞,您可以调用ReadDirectoryChangesW,使其以异步方式返回其结果。一个重言式,但事实。

此类主题的候选人:UI线程&任何专门负责服务多个资源的线程(套接字,任何类型的IPC,独立文件等)。

不熟悉这个项目,我猜想CDirectoryChangeWatcher不关心它的工作线程是否阻塞。通常,这是工作线程的本质。

答案 2 :(得分:0)

我尝试在工作线程中同步使用ReadDirectoryChanges,并猜测是什么,它被阻止,以便线程不会在程序出口处自行退出。 所以如果你不想使用像TerminateThread这样的邪恶东西,你应该使用异步调用。