您的位置:首页 > 编程语言

使代码运行在一个单独的线程中的方法

2017-10-30 13:48 288 查看
Qt之线程(QThread)

class WorkerThread : public QThread
{
Q_OBJECT

void run() Q_DECL_OVERRIDE {
QString result;
emit resultReady(result);
}

signals:
void resultReady(const QString &s);
};

void MyObject::startWorkInAThread()
{
WorkerThread *workerThread = new WorkerThread(this);
connect(workerThread, &WorkerThread::resultReady, this, &MyObject::handleResults);
connect(workerThread, &WorkerThread::finished, workerThread, &QObject::deleteLater);
workerThread->start();
}
上面的例子中,在run()返回后线程就会退出,在线程中将不会有任何的事件循环运行除非调用exec()。
注意一个线程实例位于实例化它的旧线程中,而非调用run()的新线程中,这意味着所有线程的排队槽将在旧线程中执行。因此,开发人员希望在新线程调用槽必须使用worker-object方法,新槽不应直接在子类化QThread中来实现。
当子类化QThread时,请记住,构造函数在旧线程中执行,然而run()在新线程中执行。如果一个成员变量的访问来自两个函数,然后从两个不同的线程访问变量,需要检查这样做是否安全。
注:用在不同的线程中的对象进行交互时必须小心。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  线程
相关文章推荐