QT开发中文网

那可以在线程主函数里调用?

不建议在线程主函数里直接调用delete或deleteLater,因为这可能会导致一些不可预知的问题。在主线程中删除QThread对象比较安全,可以通过信号和槽机制来实现:

  1. 在主线程中定义一个槽函数,用于接收QThread对象发送的finished()信号。

  2. 在创建QThread对象时,将它的finished()信号连接到上述槽函数。

  3. 当QThread执行完毕后,会自动发出finished()信号,在槽函数中调用deleteLater()来删除该QThread对象。

示例代码如下:

class MyWorker : public QObject {
    Q_OBJECT
public slots:
    void doWork() {
        // 执行耗时操作
        emit workFinished();
    }
signals:
    void workFinished();
};

class MyThread : public QThread {
    Q_OBJECT
public:
    void run() override {
        MyWorker worker;
        connect(&worker, &MyWorker::workFinished, this, &MyThread::onWorkFinished);
        worker.doWork();
    }
signals:
    void finished(MyThread* thread);
private slots:
    void onWorkFinished() {
        emit finished(this);
    }
};

// 主线程中的代码:
void testMainThreadDelete()
{
    MyThread* thread = new MyThread;
    connect(thread, &MyThread::finished, thread, &MyThread::deleteLater); // 连接finished信号到deleteLater槽函数
    thread->start(); // 启动子线程
}

上面示例代码演示了在主线程中如何创建一个子线程对象,并在子线程执行完毕后自动删除该对象。在MyThread类的finished信号中,我们连接了它的deleteLater槽函数,这样当子线程执行完毕后会自动发送finished信号并触发该槽函数从而删除该对象。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://qt.0voice.com/?id=1929

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?