WaitForSingleObject()vs RegisterWaitForSingleObject()?

Inn*_*elt 6 windows winapi visual-c++

使用RegisterWaitForSingleObject()代替的优点/缺点是WaitForSingleObject()什么?

我之所以知道:

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

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

Han*_*ant 14

它很简单,WaitForSingleObject()阻塞一个线程.它消耗了一兆字节的虚拟内存,并且在被阻止时没有对它做任何有用的事情.在发出手柄信号之前,它不会唤醒并恢复做有用的东西.

RegisterWaitForSingleObject()并不会阻塞线程.线程可以继续做有用的工作.当手柄发出信号时,Windows会抓取线程池线程来运行您指定为回调的代码.您在WFSO呼叫后编程的代码相同.还有一个线程涉及让回调运行,等待线程,但它可以处理许多RWFSO请求.

因此,最大的优点是您的程序可以使用更少的线程,同时仍处理许多服务请求.缺点是完成代码开始运行可能需要更长的时间.由于该代码在另一个线程上运行,因此更难以正确编程.另请注意,当您已使用重叠I/O时,不需要RWFSO.