WriteToPort("#@"); //向串口发数据
Sleep(200);       //等待接收数据,另还有什么更好的方法判断接收完毕!
char* sTempbuf=new char[6];
strcpy(sTempbuf,m_Buf);
int result=strcmp(sTempbuf,TempBuf);
delete [] sTempbuf; //程序运行到这要出错,为什么?
if(result==0)
{
strcpy(TempBuf,cNewPaswd);
TestBuf[0]='……';
WriteToPort(TestBuf); //再向串口发数据,但好象没运行。为什么?
Sleep(100);          //同上
if (m_bThreadAlive) //关闭监听线程
{
do
{
SetEvent(m_hShutdownEvent);
} while (m_bThreadAlive);
TRACE("Thread ended\n");
                            delete [] m_writebuf; //全局指针销毁
}
if(m_Buf[0]==TempBuf[5])
{
m_Buf.Empty();
return 1;
}
else
{
m_Buf.Empty();
return 0;
}
}
else
{
if (m_bThreadAlive)
{
do
{
SetEvent(m_hShutdownEvent);
} while (m_bThreadAlive);
TRACE("Thread ended\n");
                           delete [] m_writebuf;
}
m_Buf.Empty();
return 0;
}
大家帮帮找找问题,谢谢了!

解决方案 »

  1.   

    WaitCommEvent,WaitForMultipleObjects,
    会不会出现缓冲区溢出的现象
      

  2.   

    啊!不明白?
    delete [] sTempbuf; //程序运行到这要出错,为什么?
    这句怎么都会出错? 
      

  3.   

    我可以提供给你一个串口读写得DLL,我自己写的,有兴趣给我你的邮箱
      

  4.   

    [email protected]
    谢谢哈!
      

  5.   

    http://www.gjwtech.com/vcandc/scommassistantcode02.htm#串口调试助手源程序
      

  6.   

    谢谢大家的帮忙!
    我现在想解决的问题是连续发2次但第2次好象没发,开始以为是等待时间不够,但加大后还是不行,如果我在第2个WRITEPORT前加个AfxMessageBox弹个消息框却可以完成第2次发送。????????
      

  7.   

    还有我想说明下,在TestBuf="-"这设置个断点,然后单步调试运行第2个writeport也能正常运行,跟在前面加个AfxMessageBox一样。
    否则程序运行到这就要出错。
    debug assertion failed!
    afx.inl出错!
      

  8.   

    delete (sTempbuf); 用该没问题了吧
      

  9.   

    [email protected]谢谢!
      

  10.   

    是 strcpy(sTempbuf,m_Buf);
    delete  sTempbuf; //程序运行到这要出错,为什么?
           本身的错误,和串口无关。
      

  11.   

    我第2次用WRITETOPORT发数据怎么没反应啊?我单步调试又是成功的,谁能告诉我?
      

  12.   

    端口传送有延时,Sleep()控制不了得
      

  13.   

    想玩转通信(串口、并口、以太网口、USB口等等)你得对多线程编程有一定经验才行。
    因为就常接触到的这几类通信中,发送是我们可以控制的,
    而接收是不可控制的,必须另起监听线程来进行操作
    参考MSDN->Platform SDK->base service->HardWare->communication resource->communication reference