我尝试从另一个线程启动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。
我的功能怎么了?
答案 0 :(得分:2)
问题在于QTimer依赖于与正在运行的Qt事件循环交互以执行其任务的能力。由于非Qt线程没有事件循环,因此QTimer无法完成其工作。 (即必须在线程中运行一些Qt代码,这将发出timeout()信号,而这并不是自己发生的)