从另一个非gui线程启动QTimer

时间:2014-08-06 01:36:08

标签: c++ multithreading qt

我尝试从另一个线程启动QTimer(以获得更好的准确性)。

我认为问题出在功能连接上,但让我看看我的代码:

//code from constructor of parent.cpp class
{
    //run_clock_timer(this); // this works

    std::thread t1{ [this] { run_clock_timer(this); } }; //not works
    t1.join();
}

功能:

void class::run_clock_timer(class* inst){
    QTimer * test = new QTimer(inst);
    connect(test, SIGNAL(timeout()), inst, SLOT(updateTime()));
    test->setInterval(50);
    test->start(timer_precision);
}

调试器告诉我运行run_clock_timer的代码,但没有结果。

我想我会在使用QThread时没问题,但我想使用std :: thread。

我的功能怎么了?

1 个答案:

答案 0 :(得分:2)

问题在于QTimer依赖于与正在运行的Qt事件循环交互以执行其任务的能力。由于非Qt线程没有事件循环,因此QTimer无法完成其工作。 (即必须在线程中运行一些Qt代码,这将发出timeout()信号,而这并不是自己发生的)