【发布时间】:2015-03-03 11:03:38
【问题描述】:
多个线程可以使用GetQueuedCompletionStatus() 函数从单个完成端口出列完成数据包。是否有创建这些线程的特殊功能?或者我只是使用例如CreateThread() 或_beginthreadex() 并根据需要创建尽可能多的线程?
【问题讨论】:
-
您可以自己创建完成端口并使用
CreateThread或等效的,或者您可以让线程池处理这一切:CreateThreadpoolIo。 -
@Harry Johnston 所以如果我想创建 4 个在完成端口上等待的线程,我只需调用
CreateThread()4 次?另外,我猜我应该使用_beginthreadex()而不是CreateThread(),对吗? -
(1) 是的。 (2) 除了风格问题之外,它不再重要了。使用您喜欢的任何一个。
-
其实这不仅仅是风格问题。如果您使用 c 运行时,则必须使用
_beginthreaex(),否则关键库组件在首次使用之前将无法正确初始化,这可能会在内存不足的情况下导致问题(请参阅CreateThread()的文档)。
标签: c++ sockets winapi network-programming iocp