int _tmain(int argc, _TCHAR* argv[])
{
SMSStartup(_T("chassis_topo.txt"));
Communication *pCommunication = new Communication();
pCommunication->initializeUDP();
while(1)
{
string recebuf;
string rec_funtype;
while(!pCommunication->ReceFrom(recebuf));
if(FunHandle(recebuf))
pCommunication->SendTo(sendbuf.str());
else
continue;
}
delete pCommunication;
SMSClosedown();
         cout<<"dddddddddddddd"<<endl;
         sleep(5000);
return false;
}
这个进程执行了一会,控制台的窗口就消息了,而且dddddddd没有打印,说明不是正常跳出while退出的,但是我所调用的这些函数,里面都没有终止当前进程的函数,比如exit啥的都没有调用,但是就是退出了,莫名其妙的没了。
后来发现一个问题:刚调了调,有个线程读数据,select后刚要revcfrom,但是被别的线程读走了,没有互斥,但是这个可能造成程序终止吗?

解决方案 »

  1.   

    string recebuf;
    string rec_funtype;
    写出循环体吧,看着不舒服
      

  2.   

    处错误后一般会与个框框提示的啊,昨晚跑了1晚上,今天还没问题,看任务管理器,内存少了3M,不算内存泄露吧,可能是windows自身消耗的吧?
    互斥这块只能是一般导致这个函数就死了,但是也不至于出现一个错误对话框,太难找了
      

  3.   

    这个有区别吗,会导致这个问题吗,我的
    while(!pCommunication->ReceFrom(recebuf));
    recebuf是引用。if(FunHandle(recebuf))
    是直接的string
      

  4.   

    异常为啥没错误提示框呢?有个线程读数据,select后刚要revcfrom,但是被别的线程读走了,没有互斥,但是这个可能造成程序终止吗?
      

  5.   

    有时候程序crash不会弹窗直接关闭,有的会搞个内存不能读之类的框
      

  6.   

    有时候程序crash不会弹窗直接关闭,有的会搞个内存不能读之类的框
      

  7.   

    SendTo  是基于UDP编程开发的 SOCKET编程 有两种编程:TCP和UDP 你看看你哪种
    像程序异常一般不会出现的
      

  8.   

    非正常退出,不要怀疑while循环的功能
      

  9.   

    缓冲区溢出或者说是越界,你注意一下发送或接收分配的空间是否足够,发生溢出后程序可能会跑到未知的位置去了,这种情竞经常出现在非windows桌面系统中的程序中