我有一个 QObject 的子类,称为 myObject,它在构造函数的堆上分配了一个 QTimer 数据成员。myObject 还有一个槽,它连接到构造函数中的 QTimer timeout() 信号。我将 myObject 的指针称为 myObject_ptr。
我想在与主线程不同的线程上运行 myObject。按照相对较新的建议,我不继承 QThread。在主线程中,我使用 myObject 如下:
QThread *thread = new QThread(this);
myObject_ptr->moveToThread(thread);
connect(myObject_ptr, SIGNAL(destroyed(), thread, SLOT(quit())); //thread not needed if no object
connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater())); //to avoid memory leak
connect(thread, SIGNAL(terminated()), thread, SLOT(deleteLater())); //to avoid memory leak
thread->start();
主线程调用 myObject_ptr 的函数,该函数依次启动 QTimer 数据成员。当它超时时,什么也没有发生,但我希望定时器的 timeout() 信号连接到的 myObject 插槽被调用。问题是什么?你如何使这项工作。如果 myObject 在创建它的同一线程(即主线程)上运行,它可以完美地工作。
从我所做的所有阅读中,我认为我正在创建的新线程可能没有处理事件,因为它没有自己的事件循环。我还阅读了与此相反的文档/文章,说当线程启动时, run() 函数调用 exec() 并且您有一个事件循环。
有人可以帮我吗?
如果我将 QThread 子类化,我可能会让它正常工作,但根据当前的建议,我宁愿避免这样做。
先感谢您。