一个多线程和串口通信的问题,诸位高手请进(300分),在线等待。 (300分)

  • 主题发起人 主题发起人 maoke
  • 开始时间 开始时间
M

maoke

Unregistered / Unconfirmed
GUEST, unregistred user!
pc上的com口连接着一台控制器,控制器控制着很多终端(单片机),控制器和终端采用modem芯片通信,
控制器上有多个MODEM芯片和多条线路,
pc通过控制器和远处终端建立连接,而控制器一次可以和两台以上的终端同时通信,最多不超过十台。
具体几台只有在实际使用中才知道,每次实际使用前都是不一样的。
我的软件需要不断侦听是否有终端需要和pc建立连接,如果有就要控制控制器建立连接后,
与终端进行数据交换,同时有可能要操作数据库。
我想使用一个线程不断侦听控制器上是否有振铃信号,如果有就启动另一个线程控制控制器建立连接后,
与终端进行数据交换,并操作数据库,和几台通信就建立几个线程。
这个想法是否可行,或者各位高手有更好的想法欢迎提出,最好能提出一个实现概述。谢谢!
我因为是第一次写多线程和串口通信的软件,所以提的问题比较愚蠢,不好意思。
 
我来踢一脚,顺便关注中
 
不用建立线程,串口控件的接收数据事件就能自动侦听串口事件
 
我现在不想用控件写,因为想深入了解一下delphi的串口通信.
 
那还是去找一个控件来研究,这样的控件很多,www.51delphi.com 上面就有,
但是,你要去找这方面的书籍就累了。
 
用一个工作线程处理与控制器的连接就可以了。
 
你如果想深入了解的话,直接把控件的源代码拷贝过去用就行了,然后每行慢慢去分析吧
 
不用线程,用控件吧,既安全又省事。
mscomm,spcomm都可以的。它可以自动的对串口事件进行检测,符合你的要求的,你就可以写该事件的处理代码。
建议看《delphi串口通信编程》 人民邮电出版社的。
 
控件我手里有,如spcomm,turbopower的apro,但是如果使用它们,我对串口通信的了解也仅仅停留在使用控件上,我只是想知道我的那个想法行不行,或者有没有更好的想法和每个想法的软件实施流程而已呀!
 
虽然我没做过,但是你这个想法肯定是可行的呀,这有什么疑问嘛?
 
spcomm中有源码,有一个线程不断监听com口有无数据返回,你看一看,不是很复杂
 
帮你UP一下,本人也关注中
 
不要用线程轮询的方式,效率很差。
操作系统为串口提供了异步中断事件方式可实现你的目的,你要了解具体编程,可查MSDN,网上还有很多用VC写的例子,在DELPHI里调用API也一样可以达到目的。
 
问题是我还要启动其他线程来处理数据交换啊!在那里启动呢?
 
异步中断事件?是指SetCommMask,WaitForSingleObject等吗?
 
我想还是应该关注你的控制器是怎样和计算机通讯的吧,就是控制品和终端通讯后,特别是“同时”通讯后,它是怎能样把讯号传给计算机的,讯号是什么方式呢?
 
什么时候需要处理串口数据了,就启动线程,用API函数CreateThread()别用DELPHI的线程对象了,你的线程句柄YourThreadHandle=CreateThread(NULL,0,ThreadFunc,(LPVOID)0,0,&dwThreadID);
ThreadFunc就是你的串口数据处理函数,可能等待的事件都发生在这个ThreadFunc里,具体的线程初始化以及创建流程查MSDN,还有数据处理函数网上也有很多现成的代码可共参考。
 
是在主进程中启动还是在侦听线程中启动呢?
 
兄弟,想串口这类慢速通讯没必要使用线程,如果要求服务高并发响应的更不能使用
线程,记住 KISS 理论,越简单越正确

你可以使用 mscomm (MS VB 自带)的控件

 
你现在要启动的就是侦听线程,操作系统为你处理串口的硬件中断后,就叫醒你的侦听线程,让你处理串口数据,如果没有数据了线程就睡眠,不会浪费CPU的时间的执行代码。

我建议你看看《WIN32多线程程序设计》,《WINDOWS核心编程等书》,你要自己写会用到很多操作系统知识的。
 
后退
顶部