我已经阅读了ReadDirectoryChangesW()的文档,也看到了CDirectoryChangeWatcher project,但都没有说明为什么要异步调用它。我知道当前线程不会阻塞,但是至少对于使用完成端口的CDirectoryChangeWatcher代码来说,当它调用GetQueuedCompletionStatus()时,线程无论如何都会阻塞(如果没有更改的话)。
所以,如果我首先在一个单独的线程中同步调用ReadDirectoryChangesW(),而不关心它是否阻塞,那么我为什么要异步调用ReadDirectoryChangesW()呢?
发布于 2009-07-14 18:02:53
当您异步调用它时,您可以更多地控制哪个线程进行等待。它还允许您让单个线程等待多个内容,例如目录更改、事件和消息。最后,即使您在同一线程中等待,而该线程首先设置了手表,它也可以让您控制您愿意等待多长时间。GetQueuedCompletionStatus有一个ReadDirectoryChangesW本身不提供的超时值参数。
发布于 2009-07-14 17:31:51
您将调用ReadDirectoryChangesW,以便在需要调用线程不阻塞时异步返回其结果。一种重言式,但事实。
这些线程的候选对象: UI线程&任何单独负责服务多个资源的线程(Socket、任何类型的IPC、独立文件等)。
由于不熟悉这个项目,我想CDirectoryChangeWatcher并不关心它的工作线程是否阻塞。一般来说,这就是工作线程的本质。
发布于 2010-01-30 20:58:19
我尝试在工作线程中同步使用ReadDirectoryChanges,并且猜怎么着,它被阻塞了,这样线程就不会在程序退出时自行退出。因此,如果您不想使用像TerminateThread这样的坏东西,那么应该使用异步调用。
https://stackoverflow.com/questions/1126799
复制相似问题