WaitForSingleObject()与RegisterWaitForSingleObject()?

与使用RegisterWaitForSingleObject()而不是WaitForSingleObject()相比,有什么优点/缺点?

我知道的原因是:

  1. RegisterWaitForSingleObject()使用OS中已经可用的线程池
  2. 在使用WaitForSingleObject()情况下,应该为事件轮询一个自己的线程。

唯一的区别是轮询与自动事件? 或者这些之间有没有相当的性能优势?

它非常简单,WaitForSingleObject()阻塞一个线程。 它消耗了一个兆字节的虚拟内存,在阻塞的时候没有做任何有用的事情。 它不会醒来,并继续做有用的东西,直到处理信号。

RegisterWaitForSingleObject()不会阻塞一个线程。 线程可以继续做有用的工作。 当句柄被发信号时,Windows抓住一个线程池线程来运行你指定的回调代码。 在WFSO调用之后,您将编写相同的代码。 还有一个线程涉及获得回调运行, 等待线程 ,但它可以处理许多RWFSO请求。

所以最大的好处就是你的程序在处理很多服务请求的时候可以使用更少的线程。 缺点是完成代码开始运行可能需要一些时间。 由于该代码在另一个线程上运行,所以编程更加困难。 另外请注意,当您已经使用重叠的I / O时,您不需要RWFSO。

他们提供两种不同的代码模型。 如果使用RegisterWaitForSingleObject ,则会从OS管理的线程池的随机线程中获得异步通知回调。 如果你可以像这样构造你的代码,它可能会更有效率。 另一方面, WaitForSingleObject是一个同步等待调用阻塞(因此“占领”)调用线程。 在大多数情况下,这样的代码更容易编写,并且很可能不会出现各种死锁和竞态条件的错误。