2017-07-30 174 views
0

RegisterWaitForSingleObject()函数的文档提到了一个“等待线程”,但我无法找到任何解释/参考。什么是“等待线程”?

我认为它不是一个普通的线程,否则RegisterWaitForSingleObject()会阻止一个线程只能等待和无所事事。

+0

这是来自线程池的通常线程。但它可以等待多个对象,apc,定时器信号,io完成等。所有这些线程仅等待工作(对象发信号,apc等)并且调用用户回调 – RbMm

+0

是那些与完成I/O端口线程相同的CLR呢? – user4388177

+0

所有这些工作线程从池中。这个实现依赖于windows版本。在win2000/xp中,I/O端口存在单独的线程,它们只能通过'ZwRemoveIoCompletion'在IOCP上等待。 apc/timer线程通过'ZwDelayExecution'等待。等待通过'ZwWaitForMultipleObjects'等待的线程。从Vista线程池开始严重重新调配。存在新的api'ZwWaitForWorkViaWorkingFactory',它不会为定时器,I/O,等待中断线程。存在新的池API('CreateThreadpool'等),但所有这些只是线程 – RbMm

回答

0

您将可等待的对象句柄传递给RegisterWaitForSingleObject(),同时还有一个超时和回调。它从内部线程池中获取一个线程,并且该线程等待要发送信号的对象或超时时间,然后它调用回调。所以,“等待线程”只是一个等待发生的线程。

+0

事实上,看起来你是对的,虽然有人提到它可以等待多个信号(多达63个),使其至少更有效一些。 – user4388177