非阻塞socket在recv函数内部等待时,接收缓冲区变为不可用,怎么解决? (100分,高手来)
我在主线程里HeapCreate
然后每个工作线程里HeapAlloc作为该线程里SOCKET的recv缓冲区
当某个工作线程recv到特定数据时,我的程序的任务就完成了。
由于非阻塞socket的缘故,这时其他线程可能还在recv函数内部。
如果这个时候调用HeapDestroy,那么,当recv函数返回的时候,程序就会出现非法操作。
程序没有时间,不能无限制等待其他线程recv函数返回再HeapDestroy;由于频繁CreateThread,最好不用TerminateThread来结束所有线程。
请问,有什么办法能够保证,在不无限制等待的情况下,所有socket的recv在HeapDestroy之前返回。
[解决办法]
不要频繁的HeapAlloc和HeapDestroy,会造成内存碎片,性能下降.
这种情况下,应该考虑内存池.
每个线程只是使用内存,使用完了后把它标记为可用就行.
[解决办法]
工作线程自己new/delete好了。
由于频繁CreateThread?为何需要频繁CreateThread?
[解决办法]
工作线程自己new/delete好了。
由于频繁CreateThread?为何需要频繁CreateThread?
--------------------------
vc.net技术内幕里是这样干的,好像,貌似,记不清了
[解决办法]
程序设计不太合理,如果非要这样做,应该用信号量或者事件的方式来做
[解决办法]
为何频繁CreateThread?我也感觉很诧异!
[解决办法]
就是,频繁CreateThread,不可思议,从程序合理性找原因