qt中,主线程启动了一个子线程,子线程启动后怎么让主线程阻塞,直到子线程中发出某个信号给主线程,主线程才结束阻塞继续执行

        在客户端中,我们创建了后台线程,去执行一些后台操作,但有些全局单例以及初始化我们希望是在后台线程中完成的,而且主线程创建界面等动作必须在那之后执行。现在我们就来实现这个功能:

1.后台线程mainbackgroundprocess.h:

class MainBackgroundProcess : public QObject
{
    Q_OBJECT
public:
    explicit MainBackgroundProcess(QObject *parent = nullptr);
    static MainBackgroundProcess * instance();
    void init();
private:
    static MainBackgroundProcess * m_mainProcess;
}

class MainBackgroundProcessThread : public QThread
{
    Q_OBJECT
public:
    void run() override {
        QObject::connect(this, &QThread::finished, MainBackgroundProcess::instance(), &QObject::deleteLater);
        MainBackgroundProcess::instance()->init();
        emit readyToContinue(); // 发出工作完成,可以继续执行信号
        exec();
    }

signals:
    void readyToContinue(); // 声明工作完成信号
};

2.主线程main.cpp:

#include 
#include 

int main(int argc, char *argv[])
{
    ...
    //MainBackgroundProcess
    MainBackgroundProcessThread threadBack;

    //wait
    QEventLoop loop;
    QObject::connect(&threadBack, &MainBackgroundProcessThread::readyToContinue, &loop, &QEventLoop::quit);
    threadBack.start();
    loop.exec();// 主线程在这里阻塞,直到子线程发出readyToContinue信号

    // 主线程继续执行...
}

你可能感兴趣的:(qt,开发语言)