与使用RegisterWaitForSingleObject()
而不是WaitForSingleObject()
相比,优点/缺点是什么?
我知道的原因:
RegisterWaitForSingleObject()
使用操作系统WaitForSingleObject()
,则应使用自己的线程对该事件进行轮询。 唯一的区别是轮询与自动事件?或这两者之间是否有相当大的性能优势?
最佳答案
这很简单,WaitForSingleObject()会阻塞线程。它正在消耗一兆字节的虚拟内存,并且在阻塞时不会对其进行任何有用的处理。它不会唤醒并继续执行有用的操作,直到发出信号为止。
RegisterWaitForSingleObject()不会阻止线程。该线程可以继续做有用的工作。当发出句柄信号时,Windows将捕获线程池线程以运行您指定为回调的代码。在WFSO调用之后您将编写的相同代码。还有一个线程与该回调运行有关,即等待线程,但它可以处理许多RWFSO请求。
因此,最大的好处是您的程序可以使用更少的线程,同时仍可以处理许多服务请求。缺点是完成代码开始运行可能需要更长的时间。而且由于该代码在另一个线程上运行,因此很难正确编程。还要注意,当您已经使用重叠的I/O时,您不需要RWFSO。
关于windows - WaitForSingleObject()和RegisterWaitForSingleObject()?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18694593/