在服务器端用发送线程池管理发送线程的问题

gxhxue 2007-08-07 09:44:48
在服务器端(完成端口)用发送线程池来管理发送线程发送数据,我想问问怎样用线程池来增加发送线程?减少发送线程?是通过某一线程来控制?请详细讲讲。谢谢!
...全文
141 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
gxhxue 2007-08-28
  • 打赏
  • 举报
回复
设置为null是什么意思?就是不等待?
Beginner_mine 2007-08-27
  • 打赏
  • 举报
回复
INFINITE 等待时间
僵哥 2007-08-10
  • 打赏
  • 举报
回复
如果没有完成事件到达,则根据GetQueuedCompletionStatus当中最后一个参数,即等待的时间来决定,如果是选择永久等待,则会暂时等在该函数当中,但是可以通过外部线程主动调用PostQueuedCompletionStatus来发送一个完成事件,使得等待在其中的最后一个线程结束等待,有多个线程需要结束等待则发送多个。
gxhxue 2007-08-10
  • 打赏
  • 举报
回复
还有一个问题:调用GetQueuedCompletionStatus()没有数据到达时,是不是线程处于挂起状态?
gxhxue 2007-08-10
  • 打赏
  • 举报
回复
GetQueuedCompletionStatus()最后一个参数INFINITE是什么意思?
僵哥 2007-08-07
  • 打赏
  • 举报
回复
这个问题,问得比较悬,线程池是你自己设计的,当然如何增减应该是你自己的事情,谁也管不着你如何去处理,就算是参考别人的,那也需要有一个比较现实可行用例,或者你也可以使用文字来描述一种比较详细的应用模式,这样子别人才可以给你意见。其实增加线程,随时随处都可以,只要这个新增加的线程能够管理,服从管理就OK,但是减少线程的话,会有一堆麻烦,最基本的就是当你一个线程提交的一个或多个操作未完成之前,线程退出(包括正常和异常)都会导致相关系的未决操作被Cancel,如此可能会带来很多不必要的麻烦。特别是当你有提交多个WSASend一类的,本来是按顺序投递出去的,但是由于Cancel,则可能导致中间的数据报被Cancel掉,而前面和后面的都被发送过去了,此时就算你再次将被Cancel的报文继续重发,那么也可能导致对方收到乱序的数据,至少不是你所预期的顺序。

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧