如何在Qt c ++中管理QThread?

时间:2015-07-06 13:17:08

标签: c++ qt qthread

我正在尝试在Qt中学习QThread。我为QThread编写了以下代码,该代码运行良好。

    QThread* mThread = new QThread;
    FaceCutThread* mFaceCut = new FaceCutThread();
    mFaceCut->moveToThread(mThread);

    connect(mThread, SIGNAL(finished()), mFaceCut, SLOT(deleteLater()));
    connect(this, SIGNAL(operateFaceCut(std::string)), mFaceCut, SLOT(processFaceCut(std::string)));
    connect(mFaceCut, SIGNAL(isFinisedFaceCut(QImage,bool)), this, SLOT(handleFaceCutResults(QImage,bool)));
    mThread->start();

现在我想再添加一个应该用作QThread的类,比如;

Enroll *mEnroll = new Enroll();

我应该将mEnroll对象与之前的mThread一起使用,还是应该创建新的mThread2;

QThread* mThread2 = new QThread;
mEnroll->moveToThread(mThread2);

优点和缺点是什么?

1 个答案:

答案 0 :(得分:4)

这取决于你想要实现的目标。如果将相同的类放在同一个线程中,那么它们将在同一个线程中执行。如果您希望它们在单独的线程中执行,则将其放入另一个线程。例如,如果您想独立使用它们 - 一个线程加载/读取数据,第二个处理数据并通过信号连接它们。如果线程共享资源等,单独的线程会产生同步问题。(长主题http://www.drdobbs.com/tools/avoiding-classic-threading-problems/231000499)在同一个线程中拥有对象意味着对象具有共同的

  • 注册状态(包括PC和堆栈指针)

  • 堆栈

  • 信号掩码

  • 优先级

  • 线程私有存储

这可以被视为有利或不利......