问题标签 [qthread]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1012 浏览

multithreading - 在 QThread 的 run() 方法中声明与在 QThread 中声明为局部变量

考虑以下代码片段:

和以下代码:

我知道互斥锁、竞争条件等的一般理论,

假设 Set 总是在线程启动后调用,(即在调用 run() 之后),在 ThreadA 和 ThreadB 的执行中哪个线程拥有“myVariable”?

这种场景下主线程和QThread是如何共享资源的??

QThread(即ThreadA和ThreadB)及其主要应用程序中myVariable的范围和有效性是什么?

谢谢,毗湿奴。

0 投票
2 回答
5844 浏览

c++ - 如何告诉 QThread 等到工作完成,然后完成?

我有一个使用一个工作线程的简单应用程序。这个工作线程启动并初始化DownloadManager,它负责从网络下载文件。在我的主应用程序类中,我在 DownloadManager 完成之前发出的线程上有了 finished() SIGNAL。

我的问题是如何让工作线程等到 DownloadManager 完成它的工作。

这是示例代码:

0 投票
1 回答
211 浏览

multithreading - 使用 Qthread 将预定义类移动到线程中

我不是一个太优秀的程序员,对 QT 很陌生,很抱歉我的措辞。

我已经在 Qt 中在与 main 不同的 .cpp 文件中创建了一个传感器类,每当我运行我的程序时,它运行缓慢且滞后,因此我的教授建议为从传感器检索值的类创建另一个线程。我想把这个类移动到一个单独的新线程中,我只是简单地复制并粘贴所有内容(函数调用、信号等)在新 Qthread 的 run() 函数下。

如果这不是程序,一些基本方面的帮助会非常有益,我不太了解 QT 索引信息。

谢谢

0 投票
2 回答
2896 浏览

c++ - Qt从基于Qt示例的QThread下载文件不起作用

嗨,我构建了简单的示例,删除了所有不相关的代码,并且通常只保留有问题的代码我有执行线程的应用程序,并且在这个线程工作者内部,我放置了应该下载超过 30 个文件的下载代码,这基于 Qt 给出的下载示例,问题是 QNetworkAccessManager Slot 从不调用。
你能告诉我我在这里做错了什么吗?

0 投票
1 回答
941 浏览

multithreading - 使用 QThread 类帮助 QT 编程,如何使用它

所以我意识到我上次的解释不太清楚,所以我会再试一次。

我有一个程序,它有一个传感器类,每 40 毫秒左右从 Lego NXT 传感器获取值。我还有另一个绘图类(我相信在同一个线程中运行),它在虚拟世界中使用 opengl 每 1 毫秒绘制和移动汽车。现在的问题是,每当我的传感器获取信息时,汽车就会非常迟钝并且行驶缓慢,但是当传感器关闭并且无法获取和输入数据时,汽车会平稳运行。我该如何解决这个问题,我相信我需要创建另一个线程但我不知道该怎么做?

注意:传感器与汽车无关。

0 投票
2 回答
1731 浏览

python - PyQt4 多线程使用 QThread

在. xml.etree.ElementTree.fromstring()_ QThread还有很多其他调用使 QThread 像multiprocessing.Process(). 重要的是要说它是一个纯块,没有异常或中断。

这是代码(稍作编辑,但与源代码相同):

0 投票
3 回答
814 浏览

qt - QThread 在可以使用之前从不运行/完成?

我创建了一个名为 EncodeThread 的自定义 QObject 类,如下所示:

显而易见,此类用于使用外部库对视频进行编码。Encode() 包含实际的编码例程,run() 是我在故障排除时添加的一个函数,尽管它显然没有功能:

问题是当我在 EncodeThread 实例上使用 QThread 和 moveToThread() 函数时,似乎什么也没发生。没有数据被写入,并且实例永远不会发出应该将编码文件保存到磁盘的信号。

以上是整个设置的启动方式。EncThread 和线程变量在 MainWindow 类中声明。在尝试使用信号从主线程调用 encode() 并且 QMetaObject 失败后,我已经使 EncodeThread 调用 encode() 的 set() 函数。

我对线程并不陌生,我使用过本机 Windows 和 Linux 线程,以及各种跨平台实现的线程,但 QThreads 似乎真的让我感到困惑。任何建议都非常受欢迎:)

0 投票
3 回答
2063 浏览

qt - qt 信号/插槽和 pthreads 不能很好地一起玩

有人能告诉我为什么这个 qt 代码在定义 ASYNC_TIMERS 时不会调用回调(即从 pthread 调用 m_timer.start 但插槽从不运行)。显然,这与从 pthread 调用有关,因为它在未定义 ASYNC_TIMERS 时工作,但我想知道如何从 pthread 修复它。我已经尝试了很多在网上找到的东西,包括 moveToThread(),调用线程运行调用 exec(),但我在这个问题上没有运气?

干杯

多定时器.h:

计时器.cpp:

0 投票
1 回答
357 浏览

python - 如何知道每个线程的进度?

我是python新手,我创建了一个多线程上传程序,我的问题是我只有一个进度条显示每个线程的进度。我正在使用 python pyqt4 QThread。有没有办法知道每个上传线程的进度?这是代码的一些部分。

然后,handleDownload() 将向进度条发出信号以更新其值。

谢谢

0 投票
3 回答
3483 浏览

c++ - 如何使用 QWaitCondition 实现一个永远运行的 QThread{},但在执行此操作时仍需要捕获另一个 Slot

我实现了一个类,它可以通过 QQueue 将数据写入串行端口并通过插槽从中读取。我为此使用 QAsyncSerial ,它反过来使用 boost::asio 和回调。该类被移动到一个线程,并且当 QThread 发出“started()”时执行它的 start() 方法

问题是我在 start() 方法中使用 forever {} 和 QWaitCondition 使 QQueue 出队。虽然它正在运行(显然永远运行),但无法调用连接到 QAsyncSerial 的 dataReceived 信号的插槽,因此我从未从串行端口读取任何内容。

解决这个问题的常用方法是什么?

boost::asio 使用的更改后的 QAsyncSerial 回调:

编辑:

我用另一种方法解决了这个问题。我放弃了 QAsyncSerial,而是使用了 CallbackAsyncSerial,它也由 QAsyncSerial 直接分发。现在 boost::asio 使用的回调是 serialSlotReceivedData "slot"。这“解决”了问题,因为在线程 boost::asio 运行时调用了回调。由于它有自己的线程,因此 SerialPortHandler 运行的线程被永远循环阻塞并不重要。

新代码:(因为 QAsyncSerial 类似于 CallbackAsyncSerial 的包装器,只有一些琐碎的事情发生了变化)