代码之家  ›  专栏  ›  技术社区  ›  Paul J. Lucas

为什么要异步使用readdirectorychangesw?

  •  4
  • Paul J. Lucas  · 技术社区  · 15 年前

    我已经阅读了 ReadDirectoryChangesW() 也看到了 CDirectoryChangeWatcher project 但也不能说 为什么? 我们希望异步调用它。我明白 现在的 线程在调用完成端口时不会阻塞,但至少对于使用完成端口的cdirectorychangewatcher代码是如此。 GetQueuedCompletionStatus() , 那个 线程仍然会阻塞(如果没有更改)。

    所以如果我打电话 readdirectorychangesw()。 在一个单独的线程中同步,首先我不在乎它是否阻塞,为什么我要调用 readdirectorychangesw()。 异步?

    3 回复  |  直到 10 年前
        1
  •  5
  •   Rob Kennedy dkackman    15 年前

    当您异步调用它时,您对 哪一个 线程执行等待。它还允许您让一个线程等待多个事情,例如目录更改、事件和消息。最后,即使你是在同一条线上等待,首先设置手表,它也能让你控制你愿意等待的时间。 GetQueuedCompletionStatus 有一个超时参数, ReadDirectoryChangesW 不会自己提供。

        2
  •  1
  •   Kevin Montrose    15 年前

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

    此类线程的候选者:UI线程以及单独负责维护多个资源(套接字、任何类型的IPC、独立文件等)的任何线程。

    不熟悉这个项目,我猜cddirectoryChangeWatcher不关心它的工作线程是否阻塞。一般来说,这就是工作线程的本质。

        3
  •  0
  •   Alex Jenter    14 年前

    我尝试在工作线程中同步使用readdirectorychanges,猜猜怎么着,它阻塞了,这样线程就不会在程序退出时自行退出。 因此,如果您不想使用诸如TerminateThread之类的邪恶事物,那么应该使用异步调用。