写的程序中用到了CSerialPort类来实现串口数据的读写。现打算实现这样一个功能:上位机循环不断的发指令到下位机(上下位机通过无线数传电台连到串口进行通信),下位机收到后返回应答,上位机收到应答后停止发送。
我现在在发送的命令按钮里用CSerialPort类的writetoport()方法可实现一次写,但放在循环里,重复写,应用程序有时就不响应其他动作。
想到的解决方法是,在命令按钮里创建一个线程,在线程处理函数中写一个循环,循环体为CSerialPort类的writetoport()方法。但碰到的问题是,一运行就提示:该内存不能读,不能写等错误。
请教各位:如何在线程中调用CSerialPort类的writetoport()方法?或有没有别的解决方法。谢谢!

解决方案 »

  1.   

    你串口通信的收发频率很高么,不高的话,可定时发送。如何在线程中调用CSerialPort类的writetoport()方法?或有没有别的解决方法。
    =================================================================
    声明CSerialPort类对象,去调用成员函数writetoport()
      

  2.   

    可以在循环中发送完 加上 SLEEP(1000),来试试也就是停一下,具体时间看能接受到什么值。一般都是定时按需要发,或收到数据后,按需要发。
    线程中调用CSerialPort类的writetoport()方法,要此线程中拥有CSerialPort类此线程的句柄,要在此线程中打开串口。后面这个回答仅做参考。
      

  3.   

    半双工的串口通讯不能同时收发,可设置定时发送,收到后KillTimer.
      

  4.   

    应该在线程中加入互斥机制。比如用CriticalSection或则CMutex什么的