我试图以并发方式处理通过串行端口接收的消息。这是针对需要处理的每条消息,我想使用不同的线程。
为此,我使用以下代码,其中receive_Message
连接到为每条消息发出的信号。
void Bat::receivePWrapper(Bat* bat, Message msg){
bat->process_Message(msg);
}
void Bat::receive_Message(Message msg){
QFuture<void> future = QtConcurrent::run(Bat::receivePWrapper,this,msg);
}
它显然有效但我收到的每封邮件都会收到QObject::startTimer: Timers cannot be started from another thread
消息。
process_Message
函数操纵GUI对象。这是问题吗?
答案 0 :(得分:1)
在辅助进程中运行的函数不能直接访问任何GUI对象。
它可以发出连接到这些对象的插槽的信号,也可以使用QMetaObject::invokeMethod()
连接类型Qt::QueuedConnection
将GUI对象方法调用委托给主线程。