QObject :: startTimer:无法从另一个线程启动定时器

时间:2017-02-05 16:36:07

标签: multithreading qt

我试图以并发方式处理通过串行端口接收的消息。这是针对需要处理的每条消息,我想使用不同的线程。

为此,我使用以下代码,其中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对象。这是问题吗?

1 个答案:

答案 0 :(得分:1)

在辅助进程中运行的函数不能直接访问任何GUI对象。

它可以发出连接到这些对象的插槽的信号,也可以使用QMetaObject::invokeMethod()连接类型Qt::QueuedConnection将GUI对象方法调用委托给主线程。