首页| 论坛| 消息

标题:多线程数据传递共享问题
作者:行走的李屁娃
日期:2022-02-17 09:06
内容:

在mianwindow中move了两个object对象到QThread
需求:线程A中收到数据(数据一个int数值之类,一般是网口上来的),线程B中使用(甚至是线程C),A数据刷新周期很快,ms级别
方法:a.全局变量加锁(现在不想用这个)
b.A信号发到B(也不想用,数据类随时在增加,信号会增多,结构体发送链表发送也不尽如人意)
有没有其他的办法好一点,自己这两种都感觉很蠢


#1 [zhaoxg 02-17 20:26]
可以这样吗?
在一个线程A建立一个结构,数据刷新时发送刷新信号,把结构指针作为参数发送出去
#2 回 zhaoxg 的帖子 [行走的李屁娃 02-20 13:44]
zhaoxg:可以这样吗?
在一个线程A建立一个结构,数据刷新时发送刷新信号,把结构指针作为参数发送出去 (2022-02-17 20:26) 
有的数据我也采用过引用传递的方式,指向的是同一片内存,和方法A一致感觉
#3 [qigebixia 03-06 14:05]
当然是 C++无锁队列
#4 [wwwfffhhh 03-23 12:25]
数据总是保存到加锁的多线程共享队列中的,关键是线程B要怎么编写,线程B应该采用等待信号量的方式,那么线程B可以在1微秒之内完成从共享队列取走数据,那么就不会影响线程A的运行。
建议编程思路:
线程A:接收数据--》进入临界区--》保存数据到共享队列--》离开临界区--发信号量让线程B处理数据
线程B:线程B本身是个死循环等待线程A的发信号量程序,所以线程B的处理流程应这样:等待线程A的需要处理数据信号量--》进入临界区--》取走所有的共享队列数据(此时不处理数据)--》离开临界区--》处理拿到的所有共享队列数据--》重新循环等待线程A的需要处理数据信号量

如果按照上面的多线程思路,那么你的处理数据都是微秒级完成的,数据的处理延迟也是微秒级完成的
#5 [candy_10wbi 04-27 19:38]
顶顶顶....................

<< 1 2 >> (1/2)

回复 发表
主题 版块