加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

多线程 – Qt应用程序中的线程和事件循环

发布时间:2020-12-15 04:33:09 所属栏目:Java 来源:网络整理
导读:任何人都可以解释线程和事件循环中的差异,以及如何在QT应用程序中使用它. 我在哪里可以使用移动到线程并完成线程类.? 解决方法 每个线程都处理它自己的事件循环,你通常不需要担心这个问题 – 它会为你照顾,除非你有一个特定的理由让它独自存在. QThread是Qt
任何人都可以解释线程和事件循环中的差异,以及如何在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类.

注意:此代码也是一个片段 – 它不处理线程的关闭,还有其他“模板”代码可用于此.

编辑

因此事件由事件队列处理(诸如所有基本类型QEvent的鼠标点击事件之类的事情) – 系统使用更多事件,其中一些事件可以触发信号(例如onClicked).信号和插槽是一种不同的机制,用户可以使用connect()函数在插槽中处理这些机制.这是一个更好的解释,然后我可以想出:
see here

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读