如何为完成端口创建多个线程?
Posted
技术标签:
【中文标题】如何为完成端口创建多个线程?【英文标题】:How to create multiple threads for the completion port? 【发布时间】:2015-03-03 11:03:38 【问题描述】:多个线程可以使用GetQueuedCompletionStatus()
函数从单个完成端口出列完成数据包。是否有创建这些线程的特殊功能?或者我只是使用例如CreateThread()
或_beginthreadex()
并根据需要创建尽可能多的线程?
【问题讨论】:
您可以自己创建完成端口并使用CreateThread
或等效的,或者您可以让线程池处理这一切:CreateThreadpoolIo。
@Harry Johnston 所以如果我想创建 4 个在完成端口上等待的线程,我只需调用 CreateThread()
4 次?另外,我猜我应该使用_beginthreadex()
而不是CreateThread()
,对吗?
(1) 是的。 (2) 除了风格问题之外,它不再重要了。使用您喜欢的任何一个。
其实这不仅仅是风格问题。如果您使用 c 运行时,则必须使用 _beginthreaex()
,否则关键库组件在首次使用之前将无法正确初始化,这可能会在内存不足的情况下导致问题(请参阅CreateThread()
的文档)。
【参考方案1】:
在给定 IOCP 上调用 GetQueuedCompletionStatus()
的线程没有什么特别之处。任何线程都可以做到。因此,您可以使用通常的线程创建函数来创建“I/O 线程”。一般来说,最好使用_beginthreadex()
,除非您正在为不支持它的平台编写代码,或者您没有与 CRT 链接。
【讨论】:
以上是关于如何为完成端口创建多个线程?的主要内容,如果未能解决你的问题,请参考以下文章