【问题标题】: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() 的文档)。

标签: c++ sockets winapi network-programming iocp


【解决方案1】:

在给定 IOCP 上调用 GetQueuedCompletionStatus() 的线程没有什么特别之处。任何线程都可以做到。因此,您可以使用通常的线程创建函数来创建“I/O 线程”。一般来说,最好使用_beginthreadex(),除非您正在为不支持它的平台编写代码,或者您没有与 CRT 链接。

【讨论】:

    猜你喜欢
    • 2011-05-10
    • 2018-07-22
    • 1970-01-01
    • 2010-10-07
    • 2010-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多