非阻塞socket在recv函数内部等待时,接收缓冲区变为不可用,怎么解决? (100分,高手来)

瓦琦儿 2007-03-05 11:23:14
我在主线程里HeapCreate
然后每个工作线程里HeapAlloc作为该线程里SOCKET的recv缓冲区

当某个工作线程recv到特定数据时,我的程序的任务就完成了。

由于非阻塞socket的缘故,这时其他线程可能还在recv函数内部。

如果这个时候调用HeapDestroy,那么,当recv函数返回的时候,程序就会出现非法操作。

程序没有时间,不能无限制等待其他线程recv函数返回再HeapDestroy;由于频繁CreateThread,最好不用TerminateThread来结束所有线程。

请问,有什么办法能够保证,在不无限制等待的情况下,所有socket的recv在HeapDestroy之前返回。
...全文
623 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
rickywei 2007-03-06
  • 打赏
  • 举报
回复
就是,频繁CreateThread,不可思议,从程序合理性找原因
taianmonkey 2007-03-06
  • 打赏
  • 举报
回复
为何频繁CreateThread?我也感觉很诧异!
DentistryDoctor 2007-03-05
  • 打赏
  • 举报
回复
工作线程自己new/delete好了。
由于频繁CreateThread?为何需要频繁CreateThread?

ouyh12345 2007-03-05
  • 打赏
  • 举报
回复
不要频繁的HeapAlloc和HeapDestroy,会造成内存碎片,性能下降.
这种情况下,应该考虑内存池.
每个线程只是使用内存,使用完了后把它标记为可用就行.
gaoxi2002 2007-03-05
  • 打赏
  • 举报
回复
程序设计不太合理,如果非要这样做,应该用信号量或者事件的方式来做
tiger波波 2007-03-05
  • 打赏
  • 举报
回复
工作线程自己new/delete好了。
由于频繁CreateThread?为何需要频繁CreateThread?
--------------------------------------------------------------
vc.net技术内幕里是这样干的,好像,貌似,记不清了

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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