大家好,我有个问题和大家讨论一下:1.在WinXP下使用C#语言,多线程操作串口的问题。
   
  建立3个线程,一个负责读串口,一个负责写串口,还有一个是程序启动时的主线程,负责界面响应。我在程序内定义一个串口类,并初始化一个串口对象。现在的问题是:串口既然是全双工的,那么,我是否需要控制串口的读、串口的写两个线程互斥的访问(使用)串口对象呢?不控制会有错误吗?另一方面,我又在想,串口对象在程序中是一个公共资源(虽然串口硬件支持全双工),可以被多个线程访问,那么串口的读写操作是否应该互斥呢?2.在WinCE中,情况又是怎样的呢?
多谢高手指教!

解决方案 »

  1.   

    鄙人以前用delhi做上位机通信软件就是这样的。
      

  2.   

    这个问题已经解决了。
    首先,串口支持全双工模式,即串口的接收缓冲区和发送缓冲区是分开的,故可以使用多个线程同时,不互斥的同时读写串口。
    然后,定义4个线程:一个主线程(界面线程,启动时的主线程),一个串口监听线程,一个处理接收到的串口数据的线程,一个写串口的线程。另外,再定义两个缓冲区队列,一个存放从串口接收到的数据(Qr),一个存放向串口写的命令(Qw)。
    发送时:界面线程向Qw中插入一条向串口发送的数据帧,然后返回;写串口的线程从队列中取数据帧写到串口。两个线程间是一个生产者-消费者问题;
    接收时:串口监听线程接收完整数据帧,放入Qr,然后继续监听串口;处理接收到的串口数据的线程从Qr中读取数据帧并处理,两个线程间也是一个生产者-消费者问题。