【紧急求助】BCB中的多串口多线程问题

youlooklook 2006-07-12 12:19:39
第一次用BCB编写多线程的程序,而且是针对串口的,遇到问题很多,而且在处理机制上也不熟悉,希望各位朋友能够无私相助,指点一下,偶的任务期限已经超期了,不想埃K太狠了,谢谢大家!

问题描述:
程序要和多台下位机通过串口交互,每台下位机对应一个串口,我们采用多串口卡。
程序需要多个工作线程,每个工作线程对应一个下位机,能够独立运行,互不干扰,并能把交互信息显示出来,并录入日志文件。
程序中每个线程里均有流程控制问题,要求具有超时重发等异常处理机制。

现在我实现的程序中每个子线程类中封装了一个Victor的串口控件来实现串口操作,只有一台下位机时能够正常运行,但是如果有多台下位机,运行起来给人的感觉是都乱了套,好像不是多线程,线程之间有干扰,比如一个通讯有问题,一个正常时,结果正常的那个也会变得通讯超时什么的。多线程之间如何协调工作,比如日志显示、从主线程让子线程临时发送一个命令,等等这些操作如何实现呢?

不知自己是否描述清楚了,希望能够帮我一下,真的狠感激!可以另行开贴给分。
...全文
1023 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
土著巫师 2006-10-30
  • 打赏
  • 举报
回复
原来的串口线有毛病,成功开发自己的控件,好用。:)
wz 2006-10-28
  • 打赏
  • 举报
回复
study
土著巫师 2006-10-19
  • 打赏
  • 举报
回复
在WINDOWS 2003上接收到字符事件EV_RXCHAR也触发不了。狂婚。:(
yy2001 2006-10-18
  • 打赏
  • 举报
回复
学习。。。
lucho 2006-10-17
  • 打赏
  • 举报
回复
可能需要那线程啥的
土著巫师 2006-10-17
  • 打赏
  • 举报
回复
1、我一直在用VICTOR以前的一个版本的控件,很好用,极少有错误出现。
2、以前一真是接收别的程序发来的数据,最近做一个发送的程序,碰到不少问题。(有可能是自己使用的问题)
3、自已用SDK正在重写一个串口控件,不过也遇到一个问题:WaitCommEvent函数重叠等待事件时,在WIN9X和WIN2K 专业版上没什么问题,比如EV_TXEMPTY事件在数据发送完毕后可以正常连续触发,但在WINDOWS XP和WINDOWS 2003上EV_TXEMPTY事件时有时无,到最后完全不触发了。:(
4、我的程序依赖于EV_TXEMPTY(输出缓冲已空)工作,测试下来怎么都有不行,一开始以为是流控制上的问题,后来设置成N、8、1没有流控制的情况也不行。
5、串口通讯的高手在哪里?
netliuming 2006-08-29
  • 打赏
  • 举报
回复
估计你各个线程都有调用某个公有函数或变量。其实你这个问题加锁就行,感觉关键是你自己对处理流程不清楚。有点混乱,可能你当初设计就有问题.参照ouygg(痞子酷) 写的那些修改或重新设计吧。
yz20050510 2006-08-29
  • 打赏
  • 举报
回复
关注中!
安馨安旭 2006-07-28
  • 打赏
  • 举报
回复
只用过单线程循环扫描的方式采集,学习一下
wanglovec 2006-07-28
  • 打赏
  • 举报
回复
把主要代码贴出来呀,这样大家才能帮你分析的.估计是你的程序控制问题,要不你先两个线程 两个串口试试
「已注销」 2006-07-28
  • 打赏
  • 举报
回复
线程同步
lurenyi 2006-07-27
  • 打赏
  • 举报
回复
可以试试把线程写到一个类里,通过类来控制线程的工作.这样主线程可以通过类的实例来和线程进行通信.
zyyoung 2006-07-20
  • 打赏
  • 举报
回复
xuexi
痞子酷 2006-07-20
  • 打赏
  • 举报
回复
你的问题,可能是共享数据线程读写锁问题和公用函数是否考虑线程问题

youlooklook 2006-07-19
  • 打赏
  • 举报
回复
一个线程工作的很正常,但是两个就不行了,解决不了。哪位朋友搞过这方面,讲讲吧
痞子酷 2006-07-17
  • 打赏
  • 举报
回复
先设计,再编程。
设计要求:
1。线程与前台交互问题
2。线程处理数据独立问题
3。共享数据线程读写锁问题
4。界面写数据与线程读写数据锁问题
5。串口异常,线程异常机制处理问题
6。公用函数是否考虑线程问题
。。。。。。
先想想,再动手,祝君好运!!!!
xjq2003 2006-07-17
  • 打赏
  • 举报
回复
每个串口对应用一个线程操作,里面参数也都和其他线程独立,不要公用一个参数!
Andrionda 2006-07-17
  • 打赏
  • 举报
回复
帮楼主顶
「已注销」 2006-07-16
  • 打赏
  • 举报
回复
关注...
jaffy 2006-07-13
  • 打赏
  • 举报
回复
你每个工作线程都是从一个线程里创建出来的吗?
我没有遇到过你这种情况,估计还是同步的问题,其实由于串口是串行工作的,所以最好在一个线程还没做完之前,不要让另一个线程也占用这个端口,用WAITFOR等线程执行完了以后再RESUME那个线程.
我觉得Victor的串口控件很好用,我就用它直接做线程的,整个程序有3个线程,只用一个端口,好象没什么问题.
加载更多回复(10)

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧