qthread 相关问题

QThread是跨平台Qt框架提供的线程类。

在做某事之前等待 PyQt/PySide.QtCore.QThread 完成

我有一个数据采集线程,它对数据进行采样和处理,然后将其作为信号发送到接收器。 现在,当该线程停止时,我如何确保它已完成当前循环......

回答 1 投票 0

如何正确使用QMutex和QThread?

来自 PyQt5.QtCore 导入 * 从 PyQt5.QtWidgets 导入 * 导入时间 导入系统 将 numpy 导入为 np 主线程类(QThread): def __init__(自身,父级): super().__init__(pa...

回答 1 投票 0

在Qt中,为什么调用线程对象的wait()函数会阻止它接收信号?

QThread *ptr=new QThread(); Worker *pwk=new Worker(); ptr->setObjectName("工作线程"); pwk->moveToThread(ptr); QObject::connect(ptr,&QThread::started,pwk,&

回答 1 投票 0

在PyQt中取消后台任务(终止QThread)

这个问题与这个没有解决方案的问题非常相关,但又不完全相同。 我想问一下PyQt中是否有启动后台任务的方法,并且是...

回答 2 投票 0

`QObject.moveToThread` 在 PySide6 中不占用插槽

我正在对线程应用程序进行故障排除,我注意到以下行为:在 PySide6 中,我想连接到插槽和非插槽方法,根据文档应该...

回答 1 投票 0

线程中的QTcpSocket通信

我正在制作两个应用程序:一个是服务器,一个是客户端。服务器使用QTcpServer和QThread来监听客户端。客户端使用QThread与服务器建立连接。 服务器...

回答 1 投票 0

QThreads 并行运行吗?

我有两个线程正在运行,它们只是打印一条消息。这是一个简单的例子。 这是我的 Header.h: #pragma 一次 #包括 #包括 ...

回答 1 投票 0

即使主线程繁忙,后台线程中的 QTimer 是否也会更新?

假设我有一个 PyQt GUI 应用程序和一个使用 QThread 在后台运行的 QTimer。 QTimer设置为1秒的间隔并无限运行。 现在主线程开始忙碌......

回答 1 投票 0

c++ qt多线程在主窗口中调用但是没有效果

MyThread 类:公共 QObject{ Q_OBJECT 无效工作(){ q调试()<<"MyThread::work() thread id: "< class MyThread : public QObject{ Q_OBJECT void work(){ qDebug()<<"MyThread::work() thread id: "<<QThread::currentThreadId()<<"\n"; } } MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { qDebug()<<"main thread id: "<<QThread::currentThreadId()<<"\n"; QThread* subThread = new QThread; MyThread* my_thread = new MyThread; my_thread->moveToThread(thread1); my_thread->start(); qDebug()<<"00000000"; my_thread->work(); connect(ui->pushButton, &QPushButton::clicked, my_thread, &MyThread::work); connect(ui->pushButton, &QPushButton::clicked, this, [=]{ qDebug()<<"11111111"; my_thread->work(); }); connect(ui->pushButton, &QPushButton::clicked, my_thread, [=]{ qDebug()<<"22222222"; my_thread->work(); }); } 程序执行结果: main thread id: 0x1a70 00000000 MyThread::work1() thread id: 0x1a70 11111111 MyThread::work1() thread id: 0x1a70 MyThread::work1() thread id: 0x698 22222222 MyThread::work1() thread id: 0x698 请问为什么主窗口直接调用 my_thread->work(),conncet(ui->pushbuton, &QPushButton::clicked, this, [=]{my_thread->work() ;});两者都是在主线程中执行,而另外两个调用在子线程中正确执行? 将问题中的代码问题放在一边,规则是连接到信号的代码在创建/移动到 receiver 对象(而不是发射器)的线程中执行(至少默认情况下,更多稍后再说)。 除了直接调用 work 方法的一种情况外,所有连接都是通过 Qt::AutoConnection 完成的。引用: 如果接收器位于发出信号的线程中,则使用 Qt::DirectConnection。否则,使用 Qt::QueuedConnection。连接类型在信号发出时确定。 然后: this(MainWindow)是在主线程中创建的(QWidget的实例只能在主线程中创建,不能移动),因此: my_thread->work(); 从主线程调用。 连接 connect(ui->pushButton, &QPushButton::clicked, this, [=]{ ... });将在主线程中执行lambda。 (由于 ui->pushButton 和 this,QWidget 的两个实例都位于同一个线程中,因此它实际上是 Qt::DirectConnection) my_thread (MyThread*) 已在主线程中创建,然后移至工作线程。 connect(ui->pushButton, &QPushButton::clicked, my_thread, &MyThread::work); 实际上是 Qt::QueuedConnection,因此 work 将从工作线程执行。 connect(ui->pushButton, &QPushButton::clicked, my_thread, [=]{ ...}); 是等价的,即将从工作线程执行。 对于后 2 个连接,您可以使用 work 强制 Qt::DirectConnection/lambda 从主线程执行。 这种方法很少被推荐,但是是可能的。 最终细节: 使用 Qt::DirectConnection 连接的方法/lambda(无论是显式的还是通过 Qt::AutoConnection)都会立即执行,即:在 emitter 的线程中(根据链接文档,又名 signalling thread),并且无需等待返回事件循环。 相比之下,使用 Qt::QueuedConnection 连接的方法/lambda 在执行之前会有一些延迟,因为您必须等待事件循环执行。 这就是输出按照您在函数中呈现的方式排序的原因:排队的连接落后于直接连接。如果一切都是Qt::DirectConnection,则事情将以您连接它们的相同顺序执行。

回答 1 投票 0

从未收到在 QThread 上运行的 UnixDomain 数据报套接字服务器发出的信号

我创建的文件 我创建了 WorkerThread 类扩展 QThread,如下所示: // https://stackoverflow.com/a/14546167/11073131 #ifndef 线程_H #定义THREAD_H #包括 #

回答 1 投票 0

PyQt5 - QThread 子类,重新实现 run() 但也处理事件

此链接解释了 QThread 可以通过以下两种方式之一使用: 运行默认事件循环的 QThread 实例。您可以使用信号和工作线程调度要由线程执行的事件...

回答 1 投票 0

关闭从 QThread 运行的 Pygame 停止响应

我正在运行 PyQt5 制作的游戏库中的 pygame 蛇游戏。我正在使用 QThread 运行。在我关闭游戏之前它一直运行良好。每当我用关闭按钮关闭游戏时,p...

回答 2 投票 0

首次打开时 GUI 崩溃。不过下次打开就正常了

我已经使用 python 从 Qt Designer 创建了一个 GUI。这个 UI 基本上查询数据库中的数据,将数据(字典列表)转换为对象实例列表,并将它们传递给 UI 的模型......

回答 1 投票 0

启动 PyQt 应用程序而不阻塞主线程

我正在向现有应用程序添加 PyQT UI。我必须通过从主线程上的应用程序收到的回调来初始化 QAppliaction。我无法从

回答 1 投票 0

pyqtSignal 发出多种类型

我有一个信号:auto_dj_start = pyqtSignal(dict,str,dict,str) 有时,当播放器列表为空时,我想向所有参数发出 None 而不是字典和字符串。 但出现这个错误:

回答 1 投票 0

PyQt5 - 将多重处理用于 matplotlib 目的

使用这段代码,我试图绘制一个持续时间=125毫秒的 pydub.AudioSegment 信号。 绘图时间窗口(x 轴)为 3 秒。 代码: 导入时间 从 PyQt5.QtCore 导入 pyqtSignal、QThread 来自

回答 1 投票 0

使用 QThread 定位函数

我知道这个结构 类 MyThread(QThread): def __init__(自身): 超级().__init__() def 运行(): # 做东西 t = MyThread() t.start() 使用常规线程。威胁...

回答 1 投票 0

如何使用子进程下载文件并更新PyQt6中的QProgressBar

我正在编写一个程序来下载一堆文件,程序很长,我通过子进程调用aria2c.exe来下载文件,我遇到了问题。 具体来说,当使用...

回答 1 投票 0

如何让QThread退出进程?

我是使用PySide6进行UI开发的初学者,但由于某些情况,我必须为我创建的程序设计UI。在此 UI 的一个窗口中,我有一个名为

回答 1 投票 0

PyQt线程通信有帮助吗? QThread 和 QObject

阅读和搜索后,我尝试使用生成 QObject,然后使用 movetoThread 方法运行独立进程并允许 QMainWindow 继续响应。这还没有...

回答 2 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.