大家好,我有个问题和大家讨论一下:1.在WinXP下使用C#语言,多线程操作串口的问题。
建立3个线程,一个负责读串口,一个负责写串口,还有一个是程序启动时的主线程,负责界面响应。我在程序内定义一个串口类,并初始化一个串口对象。现在的问题是:串口既然是全双工的,那么,我是否需要控制串口的读、串口的写两个线程互斥的访问(使用)串口对象呢?不控制会有错误吗?另一方面,我又在想,串口对象在程序中是一个公共资源(虽然串口硬件支持全双工),可以被多个线程访问,那么串口的读写操作是否应该互斥呢?2.在WinCE中,情况又是怎样的呢?
多谢高手指教!
建立3个线程,一个负责读串口,一个负责写串口,还有一个是程序启动时的主线程,负责界面响应。我在程序内定义一个串口类,并初始化一个串口对象。现在的问题是:串口既然是全双工的,那么,我是否需要控制串口的读、串口的写两个线程互斥的访问(使用)串口对象呢?不控制会有错误吗?另一方面,我又在想,串口对象在程序中是一个公共资源(虽然串口硬件支持全双工),可以被多个线程访问,那么串口的读写操作是否应该互斥呢?2.在WinCE中,情况又是怎样的呢?
多谢高手指教!
解决方案 »
- EF+MVC3的问题,连表的MODEL怎么用EF进行查询.
- 未处理 System.AccessViolationException Message:尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
- 有熟悉证券软件的朋友没,请教如何取通达信除权数据
- .net framework3.5 20m的那个安装文件在哪里?
- combobox绑定问题!!!!!!!!
- winform按钮点击以后不保留焦点
- 为什么我在vs2005中设计水晶报表,数据浏览却没有数据
- C#中多窗体控制问题?
- 如何得到指定网页的源文件(html代码)
- C#如何直接读取Excel指定单元格的值?很是着急,请帮忙。
- C# winform 绘制刻度表
- VSS签出后 仍看不到另一台机器上新建的窗体
首先,串口支持全双工模式,即串口的接收缓冲区和发送缓冲区是分开的,故可以使用多个线程同时,不互斥的同时读写串口。
然后,定义4个线程:一个主线程(界面线程,启动时的主线程),一个串口监听线程,一个处理接收到的串口数据的线程,一个写串口的线程。另外,再定义两个缓冲区队列,一个存放从串口接收到的数据(Qr),一个存放向串口写的命令(Qw)。
发送时:界面线程向Qw中插入一条向串口发送的数据帧,然后返回;写串口的线程从队列中取数据帧写到串口。两个线程间是一个生产者-消费者问题;
接收时:串口监听线程接收完整数据帧,放入Qr,然后继续监听串口;处理接收到的串口数据的线程从Qr中读取数据帧并处理,两个线程间也是一个生产者-消费者问题。