QThread 使用小计
于 2023-10-02 15:37:13 首次发布
QThread::wait()
等待线程退出, 防止在应用程序退出后, 线程仍在运行的情况. 否则将出现QThread: Destroyed while thread is still running
的问题QThread::run
函数中末尾调用QThread::exec()
函数, 不要使用死循环来保证线程的运行, 否则将出现信号槽连接后无法被触发等其他奇怪的问题QThread::run
中的独立线程, 可以使用QObject::mobeToThread(QThread)
将对象托管到指定线程, 这样可以防止部分跨线程操作对象出现的错误. 例如QTcpSocket
在不同线程中访问, QTcpSocket::readyRead
信号所绑定的插槽可能不会被调用QThread::run
函数中使用connect(myThread, &QThread::finished, member, &QObject::deleteLater)
, 这样销毁线程中的成员指针是非常安全的. 因为QThread::run
所处的线程与QThread::~QThread
所处的线程是不相同的QThread::finished
与其他对象的QObject::deleteLater
槽绑定以此来实现线程退出后自动销毁某个对象, 记得调用对象的QObject::moveToThread
将其托管到要发射QThread::finished
信号的线程中. 如果不这样做, 那么被对象的QObject::deleteLater
槽不会被QThread::finished
信号触发