gpt4 book ai didi

c++ - 从另一个线程唤醒 QThread::exec()

转载 作者:行者123 更新时间:2023-11-30 02:45:58 24 4
gpt4 key购买 nike

考虑派生自 QThreadMyThread并像这样实现它的 run() 例程

void MyThread::run() {
QThread::exec();
}

或等效

void MyThread::run() {
QEventLoop eventLoop(this);
eventLoop.exec();
}

在这种状态下,如何通过另一个线程中的某个操作导致“exec”返回?

考虑相反的情况:没有轮询,如何将事件从线程发回主线程?

显然,从线程发出的信号在同一个线程中处理。

最佳答案

您似乎对 QThreads 应该如何工作有一些误解。不幸的是,您并不孤单。

首先要做的是阅读此处的正确用法:

How To Really, Truly Use QThreads; The Full Explanation

所以,你应该这样写:

QThread* thread1 = new QThread;
QThread* thread2 = new QThread;
Task1* task1 = new Task1();
task1->moveToThread(thread1);
Task2* task2 = new Task2();
task2->moveToThread(thread2);
connect(task2, SIGNAL(finished()), thread1, SLOT(quit()));
connect(thread2, SIGNAL(started()), task2, SLOT(process()));
thread1->start();
thread2->start();

如您所见,我正在使用 quit() 插槽,就像前面提到的示例一样。您需要在 task2 中使用 then emit finished() 来尝试终止线程 1,反之亦然。

关于c++ - 从另一个线程唤醒 QThread::exec(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24024058/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com