我在主线程里HeapCreate
然后每个工作线程里HeapAlloc作为该线程里SOCKET的recv缓冲区当某个工作线程recv到特定数据时,我的程序的任务就完成了。由于非阻塞socket的缘故,这时其他线程可能还在recv函数内部。如果这个时候调用HeapDestroy,那么,当recv函数返回的时候,程序就会出现非法操作。程序没有时间,不能无限制等待其他线程recv函数返回再HeapDestroy;由于频繁CreateThread,最好不用TerminateThread来结束所有线程。请问,有什么办法能够保证,在不无限制等待的情况下,所有socket的recv在HeapDestroy之前返回。

解决方案 »

  1.   

    不要频繁的HeapAlloc和HeapDestroy,会造成内存碎片,性能下降.
    这种情况下,应该考虑内存池.
    每个线程只是使用内存,使用完了后把它标记为可用就行.
      

  2.   

    工作线程自己new/delete好了。
    由于频繁CreateThread?为何需要频繁CreateThread?
      

  3.   

    工作线程自己new/delete好了。
    由于频繁CreateThread?为何需要频繁CreateThread?
    --------------------------------------------------------------
    vc.net技术内幕里是这样干的,好像,貌似,记不清了
      

  4.   

    为何频繁CreateThread?我也感觉很诧异!
      

  5.   

    就是,频繁CreateThread,不可思议,从程序合理性找原因