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

塔伦库马尔

任何人都可以解释Threads和Event循环中的差异,以及如何在QT应用程序中使用它。

在哪里可以使用移动到线程并完成线程类。

code_fodder

每个线程都处理自己的事件循环,您通常不必担心这一点-它会为您照料,除非您有特定的理由将其保留。

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()函数处理插槽中的信号和插槽时会更多地使用它们。这是一个更好的解释,然后我想出了:请看这里

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

DLL中子应用程序中的C ++事件循环

来自分类Dev

Monotouch应用程序中的线程数

来自分类Dev

在控制台应用程序中捕获ctrl + c事件(多线程)

来自分类Dev

在wxPython应用程序中实现我自己的事件循环

来自分类Dev

Android应用程序中的线程安全?

来自分类Dev

非Qt应用程序中基于Qt的DLL中的事件循环

来自分类Dev

多线程应用程序中的QTimer

来自分类Dev

由于C ++ Qt多线程应用程序中删除指针而导致崩溃

来自分类Dev

ncurses在多线程应用程序中

来自分类Dev

未启动事件循环时,异常/杀死Qt应用程序

来自分类Dev

多线程应用程序中的Apache HttpClient和HttpConnection

来自分类Dev

pyQt和线程应用程序崩溃

来自分类Dev

在springboot应用程序中启动线程

来自分类Dev

JavaFX事件调度线程与JavaFX应用程序线程?

来自分类Dev

QT信号和插槽可在单线程中直接指导应用程序中的连接行为

来自分类Dev

如何使Compose在GTK和Qt应用程序中工作?

来自分类Dev

如何使Compose在GTK和Qt应用程序中工作?

来自分类Dev

多线程应用程序中的DLL和类

来自分类Dev

在Qt应用程序中连接GUI和计算

来自分类Dev

DLL中子应用程序中的C ++事件循环

来自分类Dev

WPF应用程序和线程

来自分类Dev

Monotouch应用程序中的线程数

来自分类Dev

Swift,应用程序中的线程数

来自分类Dev

Rails应用程序中的线程安全

来自分类Dev

未启动事件循环时,异常/杀死Qt应用程序

来自分类Dev

Qt桌面和移动应用程序

来自分类Dev

Qt Gui应用程序中的2个独立std线程

来自分类Dev

面向对象,事件驱动的应用程序中的线程

来自分类Dev

应用程序中的多个线程

Related 相关文章

热门标签

归档