首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WaitForSingleObject()对RegisterWaitForSingleObject()?

WaitForSingleObject()对RegisterWaitForSingleObject()?
EN

Stack Overflow用户
提问于 2013-09-09 08:49:18
回答 2查看 4K关注 0票数 6

使用RegisterWaitForSingleObject()而不是WaitForSingleObject()的优点/缺点是什么?

我知道的原因是:

  1. RegisterWaitForSingleObject()使用操作系统中已经可用的线程池。
  2. 在使用WaitForSingleObject()的情况下,自己的线程应该对事件进行轮询。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-09 11:17:10

它非常直接,WaitForSingleObject()阻塞了一个线程。它正在消耗一兆字节的虚拟内存,并且在被阻塞时没有对它做任何有用的事情。在手柄发出信号之前,它不会醒来并继续做有用的事情。

RegisterWaitForSingleObject()不会阻塞线程。线程可以继续进行有用的工作。当句柄发出信号时,Windows会抓取一个线程池线程来运行您指定的回调代码。WFSO呼叫后你会编写的相同的代码。仍然有一个线程需要运行回调,即等待线程,但是它可以处理许多RWFSO请求。

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

票数 15
EN

Stack Overflow用户

发布于 2013-09-09 09:03:55

它们提供两种不同的代码模型。如果使用RegisterWaitForSingleObject,您将从操作系统管理的线程池中得到一个随机线程上的异步通知回调。如果您能够像这样构造您的代码,它可能会更高效。另一方面,WaitForSingleObject是一个同步等待调用阻塞(因此“占用”)调用线程。在大多数情况下,这样的代码更容易编写,并且可能不太容易出现各种死锁和争用条件。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18694593

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档