【发布时间】:2017-07-30 21:02:37
【问题描述】:
RegisterWaitForSingleObject() 函数的文档提到了一个“等待线程”,但我找不到任何解释/参考说明它到底是什么。
我认为它不是一个常规线程,否则RegisterWaitForSingleObject() 会阻塞一个线程,只等待并且什么都不做。
【问题讨论】:
-
这是来自线程池的普通线程。但它可以等待多个对象、apc、计时器信号、io 完成等。所有这些线程只等待工作(对象发出信号、apc 等)并调用用户回调
-
那些和CLR中的完成I/O端口线程一样吗?
-
所有这些都是来自池的工作线程。实现取决于 Windows 版本。在 i/o 端口的 win2000/xp 中存在单独的线程,它们仅通过
ZwRemoveIoCompletion在 IOCP 上等待。 apc/timer 线程通过ZwDelayExecution等待。等待通过ZwWaitForMultipleObjects等待的线程。从 vista 线程池开始严重重新设计。存在新的 apiZwWaitForWorkViaWorkingFactory,它不会中断计时器、i/o、等待的线程。存在新的池 api (CreateThreadpool等) 但所有这些都只是线程 -
ZwWaitForWorkViaWorkerFactory正确的 api 名称 -
有人在另一个问答中提到,等待线程虽然是常规线程,但可以在多个句柄 (63) 上等待,因此至少每个信号不是一个线程。感谢您的 cmets。
标签: multithreading winapi threadpool