【发布时间】:2011-09-28 17:20:39
【问题描述】:
我有 3 个对象(继承自 QObject),每个对象都包含一个单独的 std::list。每个对象都在主 gui 线程(没有父线程)中创建,然后被推送到它自己的线程(使用 Qt 的QObject::moveToThread())。
每个线程都连接到一个 gui,并在不同线程之间发送带有数据的消息。每个线程本质上都是处理它自己的列表。例如:
Obj 1:数据消费者。它从列表的前面弹出(如果存在数据)以供使用。它还有一个可用的 SLOT,以便其他线程可以将数据推送到它。没有其他对象可以直接访问这个列表,只有原始的 QObject 类。
Obj 2:数据的生产者。它将数据推送到其列表中。它有 SLOTS 可供其他人“ping”它以获取数据,这些数据又会从其列表中发出 SIGNAL 弹出数据。没有其他对象可以直接访问此列表。
Obj 3:为 obj 1 生成数据并使用来自 obj 2 的数据。它有自己的内部数据结构,用于跟踪发送给 obj 1 的数据和来自 obj 2 的数据。它最终会推送这两个数据集一些QwtPlots 在做了一些分析之后。
Obj 的 1 和 2 是实时关键的,并且使用 QueryPerformanceCounter 样式的“计时”,这实际上会在它们运行时消耗 CPU。他们在每个循环中运行QCoreApplication::processEvents() 来处理发生的事件。
这是处理跨线程数据共享的好方法吗?如果不是,漏洞在哪里,你将如何纠正它们?我知道这会产生大量数据“副本”飞来飞去,但此时内存膨胀不是问题。
提前致谢:)
【问题讨论】:
标签: c++ multithreading qt signals-slots qwt