如题:
    开了一个县城使用socket接收数据,并将接收到的数据放到一个缓冲区中;
    又开了一个县城从这个缓冲区中读取数据;
    但接收数据的缓冲区有时会莫名其秒的当掉,有时甚至导致整个程序退出,使用GetLastError()又得不到什么错误,唉,真的好奇怪,是县城的问题还是SOCKET的问题呢?

解决方案 »

  1.   

    : anjy(泡泡oοО○) 
      谢谢,我用了mutex,可以吗?
      

  2.   

    我用了mutex了,也用waitforsingleobject()了.
    socket主要是写在dll中了,在我这边的县城中调用,出现以上问题;我想可能不是多县城共用缓冲区的问题,我将另外一个县城注释掉,仍然会出现这个问题,难道是DLL的问题?这个DLL在另一个WIN32程序中调用,没什么问题,如果不动键盘和鼠标的话,如果一动键盘和鼠标,这个程序就会不声不响的退出,也不出错误框。很奇怪哟!
      

  3.   

    前一段时间同样遇到这样的问题,或许能提供些有价值的资料,但我需要以下信息:
    该程序详细的环境(单/双CPU、操作系统及版本、平均可以持续的时间、无连接情况下的运行状态)。
      

  4.   

    程序运行的环境:
    1.单cpu :p4 1.70  memory:256m
    2.win2000 sp3
    3.运行时间:从我上班开机到我下班关机
    4.无连接时停下不动
      

  5.   

    我以前的鸡子装了个防火墙,socket也是总是奇怪的断~~~  , debug看堆栈发现是死在ndis层里了~~~   
     冬冬的每个socket线程都有自己的缓冲区对象,
     每个缓冲区都带自己的CS,对缓冲的读写都有CS保护
     所有的缓冲区的交互都通过"线程祖先"的缓冲管理类对象控制,
     该缓冲管理类对象与监视控制每个socket线程的通讯管理类对象平级,都由"线程祖先"创建
     
    据"X.T & X.P 's  Delphi 5 Developer's Guide " 
       提示  临界区与事件对象(比如互斥对象)的最大区别是在性能上。临界区在没有线程冲突时,要用10-15个时间片,而事件对象由于涉及到系统内核要用400-600个事件片。
      

  6.   

    建议你使用EnterCriticalSection和LeaveCriticalSection
    在线程中使用共享内存,需要仔细调试。
    CriticalSection保证了在同一时间下,只有一个线程能够访问共享内存。