level 7
最近做一个项目,一个跟地磅对接的软件.公司以前的开发的设计是:用以个Timer每隔100ms就读取一次串口。但是我感觉这样对一些配置好的电脑可能影响不大,但是对配置差的电脑就显得很卡。无外乎就是这CPU长时间盯着读取串口数据造成的。我现在想用一个线程来专门读取串口,读取的数据都发送到主界面的消息队列,让主界面每隔100ms读取消息队列里面的数据。我让同事尝试着写了一下,用线程确实电脑不卡了,但是他那边反应线程会死掉,然后程序就跟着死掉,有时是几个小时,有时是几十分钟。我也是只有一些理论,没有经验,为了少走一些弯路,来问一下:①我这种情况线程应该怎么工作:就是我应该创建一个线程,定时的挂起,定时的唤醒?还是读一次串口,就创建一个线程,读完就释放掉线程。第②:线程的读取的数据用什么样的方式传递给主窗体好,用windows消息还是用指针?或者别的什么方法?
2015年08月12日 04点08分
1
level 8
很久以前写过这样的程序,就用spcomm,在reciver中接收处理即可,不卡的
2015年08月13日 15点08分
5
好,谢谢。因为改用spcomm的话,项目代码改动较大,所有倾向于用后台线程度读数据,读完就传递到主界面,这样项目改动较小。
2015年08月14日 01点08分
spcomm并不是很稳定,有个叫什么ansyxxx的很可靠,但名字记不清了
2015年08月15日 01点08分
level 7
来,来,各位。现在程序运行了一晚,还算稳定。但是会出现一个延迟的现象,就是地磅的数据传输过来要晚个1,2秒左右的时间。我现在改用的是线程读取串口数据,用postmessage消息驱动主界面进行处理。一开始担心是因为postmessage传递的消息过多,造成了主界面的处理过于缓慢,于是我在线程处进行判断,读出来的数据如果是有变化的再传过去,没有变化的就不传。但是结果还是有延迟。我个人分析应该是等串口的数据造成的,但是串口底层的同事说他的底层没有问题,现在没法判断的是到底哪出了问题.
2015年08月15日 05点08分
7
@testerHooK 哥啊,整个项目又不是我一个人做,人家已经做好了底层的操作,然后我这边用新控件重写项目,不好吧?
2015年08月17日 02点08分
level 8
为什么不在地磅那搞个触发器,一触发就给程序一个指令,根本不用线程
2015年08月15日 13点08分
8
触发器,我表示没懂,地磅会有触发器?
2015年08月17日 02点08分
了解一下鼠标的运作
2015年08月19日 00点08分
回复
��ʥ������
:我指的是鼠标按键这种触发,只在点击时程序才运作相应命令,而不是程序主动检测鼠标是否点击。楼主现时是程序不断检测串口,长时间肯定会卡顿。
2015年08月20日 13点08分