gpt4 book ai didi

multithreading - Qt 应用程序中的线程和事件循环

转载 作者:行者123 更新时间:2023-12-04 06:49:48 25 4
gpt4 key购买 nike

关闭。这个问题需要更多focused .它目前不接受答案。












想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post .

5年前关闭。




Improve this question




谁能解释线程和事件循环中的区别,以及我如何在 QT 应用程序中使用它。

我在哪里可以使用移动到线程和完整的线程类。?

最佳答案

每个线程处理它自己的事件循环,你通常不需要担心这个 - 它会为你照顾,除非你有一个特定的理由让它独自一人。

QThread 是 Qt 提供的一个类,用于控制线程的运行。将对象“放入”该线程的方法是使用 moveToThread() 函数。

你不应该为了在线程内运行一些代码而继承 QThread 类(使用 moveToThread 函数),继承 QThread 类的唯一原因是如果你想改变线程控制的行为。

以下是让对象在线程内运行的基本步骤:

MyObj *myObj = new MyObj(0); // 0 = no parent if your object inherits QObject
QThread* thread = new QThread;
myObj->moveToThread(thread);
QObject::connect(thread, SIGNAL(started()), myObj, SLOT(run()));
thread->start();

一旦您调用 start() 线程将启动并发出开始信号,您的对象将接收它并在其插槽/函数 run() 中处理它。

注意:当对象内的函数/插槽 run() 结束时,您的线程不会结束(因此您不需要执行“永远”循环)。线程仅在您告诉它退出(或销毁它)时才停止,这意味着您的线程可以空闲,直到它收到信号或事件 - 这是事件循环进入的地方 - 传入事件由事件循环内的事件循环处理QThread 类。

注意:此代码也是一个片段 - 它不处理线程的关闭,您可以使用其他"template"代码位。

编辑

所以事件由事件队列处理(比如鼠标点击事件都是基本类型 QEvent 的事情)——更多地被系统使用,其中一些事件可能会触发信号(例如 onClicked)。信号和槽是一种不同的机制,用户在使用 connect() 函数时在槽中处理它们时使用得更多。这是一个更好的解释,然后我可以想出:
see here

关于multithreading - Qt 应用程序中的线程和事件循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36201769/

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