我最近在做一机房监控系统:可是遇上了一个问题
设备与串口相连(此设备需要发送一条指令,然后就会返回当前设备的状态,可以通过
串口读出)
我为了监视设备是否正常,就开了一个线程来监测串口接收的数据,然后固定时间间隔发送指令
读取设备状态,但我如果想要对设备进行"其他操作",这样串口接收到的数据就是"其他操作"的
返回值,这样就会出错,我如何知道哪个返回值对应哪条指令。
  另外我用CodeGuru上的那个CSerialPort类时,通过任务管理器可以看到内存在不断的增加
怎么解决。( 通过在OnTimer中调用
m_Port.WriteToPort("#0100oo\r\n"); )

解决方案 »

  1.   

    内存在不断的增加,那说明是内存泄漏嘛。
    可以将程序发给我看一看。
    [email protected]
      

  2.   

    不要让其他操作和读取状态的操作同时进行。
    bool bOp = false;// 读状态
    if(!bOp)
    {
      bOp = true;
      // 读状态操作
      // ...
      bOp = false;
    }
    else
    {
      // 表示正在进行其他操作
    }// 其他操作
    if(!bOp)
    {
      bOp = true;
      // 其他操作
      // ...
      bOp = false;
    }
    else
    {
      // 表示正在进行读状态
    }
      

  3.   

    已经发过去了,主要只有三句话
    OnInitDialog()
    OnTimer()
      

  4.   

    应该是用的overlap IO,写串口之前,应该检查上一次IO写操作是否已经完成。
      

  5.   

    如果是需要完成几个不同的命令,最好不要使用多线程,对串口的操作使用同步。不要使用Overlap。可以将串口设置成写入和读取不延时. Timeouts中设置.然后自己在ReadFile的外围设置自己的超时控制。就是做一个循环,在规定的时间内反复的读取串口,直到读出想要的数据。如果在规定的时间内没有读出想要的数据,则返回超时。继续下一个命令。这样,各条命令是顺序执行,不会发生混乱。如果使用多线程或者重叠结构,则同步和结果码识别比较困难。
      

  6.   

    我也有类似的问题,都发了好长时间了,没有人回复请高手看看。
    http://community.csdn.net/Expert/topic/3654/3654639.xml?temp=.9870264