一个多线程的简单问题

nbhx2010 2014-08-14 10:14:07
上位机软件
界面主线程里面 有两个线程A和B

比如 form_Load()函数里
{
//发送指令线程,给终端设备
A.start();
//串口接收线程
B.start();
}

先启动一个A线程
A线程里是个死循环,就是一直给终端设备发送指令下去(10个设备,每100ms发送一次指令)
while(true)
{
for (int i =0 ; i < 10; i ++)
{
//发送命令,让终端设备发数据过来
xxxxxxxxxxxxx
//处理完就暂停一下
Sleep(100);
}
}

B线程是用来接收 “A线程里终端设备接到指令后发送数据” 的 数据接收 串口线程
也是一直打开着的,串口接收到数据就处理

这样一个逻辑有什么问题吗? 多线程不太懂,会不会A线程一直在运行,而B线程根本不运行啊??
...全文
169 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
於黾 2014-08-14
  • 打赏
  • 举报
回复
一个485接10个设备,当然必须电脑是主站,设备是从站,使用问答的方式,避免同时发数据 MODBUS协议,设备响应数据本身带地址,可以区分 所以你直接给串口对象注册data_recieved事件,在事件里处理就好了,不用另外建立线程去傻等
Harrison_2009 2014-08-14
  • 打赏
  • 举报
回复
冒下泡,顺便吸收点经验~
nbhx2010 2014-08-14
  • 打赏
  • 举报
回复
引用 1 楼 Z65443344 的回复:
所谓线程,当然不会因为死循环而阻塞其他线程 不过你应该给串口注册个recived事件来处理接收到的数据,而不是另开线程轮询 另外,你这相当于异步发送接收,存在无法匹配收到的数据对应哪个发送的问题 比如1-10,10个设备 发送1,无响应,发送2,收到数据,那么如何判断收到的是哪个设备返回的数据?
关于轮询,主要是怕10个设备同时发送数据到串口(只有一个接收串口,485通讯),我是怕出现同时发送时接收乱码问题 10个设备同时发送到接收串口,会不会出现接收不到或者乱码的问题?485一根总线通过485集线器带了10个设备
nbhx2010 2014-08-14
  • 打赏
  • 举报
回复
引用 1 楼 Z65443344 的回复:
所谓线程,当然不会因为死循环而阻塞其他线程 不过你应该给串口注册个recived事件来处理接收到的数据,而不是另开线程轮询 另外,你这相当于异步发送接收,存在无法匹配收到的数据对应哪个发送的问题 比如1-10,10个设备 发送1,无响应,发送2,收到数据,那么如何判断收到的是哪个设备返回的数据?
对,你一语就道破其中问题了,厉害。肯定做过项目啊 如果这10个设备,发送上来的数据自己带了自己的地址码,这样是不是就没问题了?我根据设备的地址码来区分
sunny906 2014-08-14
  • 打赏
  • 举报
回复

 A.start();
 B.start();
不会,因为A和B在异步执行
於黾 2014-08-14
  • 打赏
  • 举报
回复
如果实时性要求不是特别高的话,建议还是改为同步处理,就是发送完直接等待接收,收不到就表示线路或设备故障.
於黾 2014-08-14
  • 打赏
  • 举报
回复
所谓线程,当然不会因为死循环而阻塞其他线程 不过你应该给串口注册个recived事件来处理接收到的数据,而不是另开线程轮询 另外,你这相当于异步发送接收,存在无法匹配收到的数据对应哪个发送的问题 比如1-10,10个设备 发送1,无响应,发送2,收到数据,那么如何判断收到的是哪个设备返回的数据?

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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