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

标签 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);

有什么优点和缺点?

最佳答案

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

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

  • 堆栈

  • 信号屏蔽

  • 优先级

  • 线程私有(private)存储

这可以被视为优势或劣势......

关于c++ - 如何在 Qt C++ 中管理 QThread?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31246946/

相关文章:

c++ - 如何在绑定(bind)到特定接口(interface)/IP 的 Qt 中发出网络请求?

python - Pyqt5 中的 QThreads : is this the correct C++ to Python translation of the official QThread docs?

python - pyqtgraph ImageView 在多线程时卡住

c++ - 在 C++ 中移动字符串的指针

c++ - 在 async_write 挂起时写入 streambuf 是否安全?

c++ - 无法用 C++ 编译 cython

c++ - 通用项目的 Qt Creator c++11 语法突出显示

Qt Creator 支持 C++11 IDE?

c++ - 使用信号和槽实现 connect() 时遇到问题

c++ - 无法使用 std::move move 内容