等待QProcess结束或超过持续时间
我正在尝试找到以下情况的解决方案: QPROCESS应在达到所需持续时间或完成命令时停止执行命令并停止执行.此QPROCESS由QThread Worker启动. 可以通过使用此操作很容易完成: QProcess task("executedTool -parameters"); task.start(); task.waitForFinished(desired_max_duration_in_ms); ,但还必须有一个函数才能暂停孔. 我可以通过pthread信号轻松暂停QPROCESS: kill(task_.pid(), SIGSTOP); 和 kill(task_.pid(), SIGCONT); 但是,在Qprocess暂停时,Waitforfined-Dration继续运行并超过. 有人知道该怎么做吗? 当我可以暂停运行QPROCESS和WAIT命令的孔Qthread时,等待时间也将被暂停.但是,如何获得Qthread的pid
4 2023-11-26
编程技术问答社区
暂停和恢复 QThread
我最近开始学习Qthreads,并且我已经在单独的线程中运行4个小时的循环(以便我可以继续使用GUI).我所追求的是,​​当用户单击暂停qpushbutton时,可以暂停/暂停线程的内容,当用户单击简历qpushbutton时,该程序应恢复.我该如何实现? 我正在考虑从我的主要班级发送信号;但是,我不确定如何在线程中处理它们.是否可以处理线程中的主类发送的信号?目前,我有线程向主类发射信号,而且效果很好,但是我不确定如何从主类发送线程并在线程中接收它们. 解决方案 好吧,所以我建议您进行内部线程变量,以在循环的每个步骤 + QWaitCondition中检查以恢复它. 创建暂停方法,您将在其中打开"暂停字段"(布尔?),不要忘记同步 在您自己的循环中使用QWaitCondition(请参阅qt文档)暂停线程执行 创建简历方法,您将关闭"暂停字段"并唤醒QwaitCondition class MyWorker: public QThread { priv
0 2023-11-23
编程技术问答社区
如何改变工作线程的进度
我是PYQT4的新手,所以也许是一个bagatelle.我试图在我的GUI中显示进度,这将由工作线程进行更新. 工作线程从我的gui的init函数开始. self.st = ServerThread() self.st.start() 这是线程类 _exportedMethods = { 'changes': signal_when_changes, } class ServerThread(QtCore.QThread): def __init__(self): super(ServerThread,self).__init__() st = self #threading.Thread.__init__(self) def run(self): HOST = '' # local host PORT = 50000 SERV
4 2023-11-11
编程技术问答社区
在Qt中为GUI线程设置优先级
是否可以将优先级设置为主GUI线程,因此与其他线程(Qthread)相比,它具有更高的优先级? ? 我的目的是不冻结GUI,而其他线程进行了一些密集的计算,该计算可能会占据CPU至100%的负载.如果有人可以共享确保GUI在此期间不会冻结的方法,而其他计算线程仍然可以尝试最大化CPU使用情况. 我考虑过管理其他线程,所以我不会同时启动太多的计算线程. 解决方案 当当前线程是GUI线程时,更改当前线程的优先级: int main(int argc, char ** argv) { QApplication app(argc, argv); QThread::currentThread()->setPriority(QThread::HighPriority); ... } 您也可以从任何其他线程提交更改 - 只要主(GUI)线程具有运行事件循环: QMetaObject::invokeMethod(qApp, []{ QThread::cu
2 2023-11-11
编程技术问答社区
PyQt: 如何在不冻结GUI的情况下更新进度?
问题: 什么是最好的做法 跟踪线程的 进步而不锁定GUI ("不响应")? 通常,什么是最佳实践 适用于GUI的线程 开发? 问题背景: 我有一个用于Windows的Pyqt GUI. 它用于处理HTML的集合集 文档. 它需要三秒钟的时间 到三个小时来处理一组 文档. 我希望能够处理 同时多组. 我不希望GUI锁定. 我正在看线程模块 为了实现这一目标. 我对线程是相对较新的. GUI有一个进度栏. 我希望它显示 选定的线程. 显示选定的结果 线程如果完成了. 我正在使用Python 2.5. 我的想法是:在更新进度时会发出qtSignal,从而触发一些更新进度栏的功能.同样在完成处理后发出信号,因此可以显示结果. #NOTE: this is example code for my idea, you do not have # to read this to answer the question(s). import
0 2023-11-10
编程技术问答社区
Qt 跨线程发送信号,其中一个是图形用户界面线程?
使用movetothread将对象从QT中的一个线程移动到另一个线程意味着什么?一切似乎都在使用Movetothread之前工作,将对象从一个线程(GUI线程)移至另一个线程(工作)和QT:Connect呼叫对象上的适当插槽. . 由于对象的居住地,GUI线程或工作人员线程是否有区别? 编辑: 我制作了一个小程序,但我不明白Qthread如何与信号和插槽功能一起工作,如果您可以解释示例 的movetothread的用途 ,我将不胜感激. #include #include #include #include #include #include "mythread.h" //GUI calls a thread to do some job and sub update the text box once it is done i
2 2023-11-10
编程技术问答社区
Qt中用于线程间通信的类设计
问题语句:用相机跟踪对象并相应地将相机移动. Process :相机获取对象的图像....处理每个相机的帧以找到对象(应该跟踪的对象...)以及每个帧中生成的信息被传递到机械设备(gimbal ...)以将相机移入锅中并倾斜... 设计:主GUI以螺纹和摄像头和gimbal在2个线程中运行...相机线程中生成的信息传递到gimbal螺纹和相同的线程(相机线程. .. ..)显示跟踪的图像... 约束:显示速率比gimbal的移动速率快 ...因此,在每个帧中... 框架已处理并显示(以10毫秒的速率) 生成的信息将传递到gimbal gimbal线程暂停更长的时间(100毫秒),以给机械零件移动,并确保在完成动作之前没有新的更新. 以下图显示了qt中的类,信号和插槽连接的设计. 请提出任何更好的方法来解决问题... 错误:有时我会遇到错误... qobject :: killtimers:无法从另一个线程停止 解决方案 对我来说
10 2023-11-06
编程技术问答社区
如何使用QTimer每10秒向QTextBrowser打印一条信息?
我已经工作了几个小时,无法弄清楚,也无法在网上找到任何有效的帮助.基本上,我要完成的要点是拥有带有按钮和QTextBrowser的QT GUI.当我按下按钮时,我希望它显示一条消息,然后每10秒打印一次. 我认为我会使用QTimer,因为有一个计时器每10秒显示消息是有意义的.当我最初将其实施到我的`buttricked()插槽中时,它会导致程序冻结.我在线寻找解决方案,并找到了Qapplication :: ProcessEvents(). 基本上在我的功能中,我有类似的东西: while(1) { QTimer *timer; connect(...) //omitted parameters for this example timer.start(10000); ui->diplay->append("Message"); while(timer.isActive()) { QApplication:
4 2023-10-21
编程技术问答社区
在一个QThread中启动QTimer
我正在尝试在特定线程中启动QTimer.但是,计时器似乎没有执行,也没有打印出来.与计时器,插槽或线程有关吗? main.cpp #include "MyThread.h" #include using namespace std; int main(int argc, char *argv[]) { MyThread t; t.start(); while(1); } mythread.h #ifndef MYTHREAD_H #define MYTHREAD_H #include #include #include class MyThread : public QThread { Q_OBJECT public:
6 2023-10-21
编程技术问答社区
从非UI的QThread修改QStandardItemModel?
i具有将QStandardItemModel绑定到QListView的QT4应用程序,并将模型从背景/非UI线程更新. 有时,当QStandardItem的S setText(..)方法从非UI线程反复调用时,该应用程序将在la datachanganged(..)处理程序中崩溃.我可以通过在for循环中反复致电setText("xxxxx")来复制问题.在我的应用中,从网络中读取数据,因此我在单独的非UI线程中更新模型. 这是常见的PB吗?如果我正确理解,这与排队连接有关,QStandardItemModel不是线程安全吗?如何解决这个问题? 谢谢! 解决方案 QStandardItemModel是QTGUI库的一部分,IIRC中的所有类都被认为不是螺纹保护.如果将数据的实际设置移至GUI线程,则应该可以.您可以使用网络线程的排队信号很容易地执行此操作.
10 2023-10-20
编程技术问答社区
为什么PyQt没有信息就崩溃了?(退出代码0xC0000409)
我正在尝试使用PYQT开发软件,但是我经常在没有调试信息的情况下陷入软件崩溃(仅Exit Code 0xc0000409).我正在使用Qthread,我编写了这样的系统: class serialThreadC(QThread): updateOutBox = QtCore.pyqtSignal(str) updateStatus = QtCore.pyqtSignal(int) def __init__(self): super(serialThreadC, self).__init__() self.ser = False self.state = 0 self.serialEnabled = False def run(self): while True: if self.state == -3 or self.state == -2:
8 2023-10-20
编程技术问答社区
如何利用Qt使一个QObject方法成为线程安全的?
假设我们在QObject派生类中写了一个非const方法: class MyClass : public QObject { int x; public: void method(int a) { x = a; // and possibly other things }; }; 我们想制作该方法线程安全:这意味着从任意线程调用它,并同时从多个线程中调用它,不应引入未定义的行为. QT提供了哪些机制/API来帮助我们制作该方法线程安全? 当该方法执行"其他事物"时,QT中可以使用哪些机制/API? 是否可以将"其他事项"分类,这些分类可以告知哪种QT特定机制/API? 主题是由C ++标准本身提供的机制,以及确保线程安全的通用/非QT特定方式. 解决方案 适用的QT API取决于线程安全方法的功能.让我们介绍从最一般到最具体的情况. 信号 信号的主体是由moc工具生成的,并且是螺纹安全的. 推论1:所有直接连
2 2023-10-20
编程技术问答社区
QThread vs std::thread
我在" pthread vs std :: thread"和" qthread vs pthread"上看到了不同的主题,但在" std :: thread vs qthread"上都没有. 我必须编程软件以驱动3D打印机并需要使用线程.将会有一个线程会不断检查安全性,另一个线程将执行打印过程,有些用于驱动每个硬件组件(移动,喷射,...),等等... 该程序是针对C ++ 11/QT的Windows开发的. 首先,我想使用qthread,但是在我看来,Qthread不允许您做像STD :: thread 的尽可能多的事情,例如,在阅读" c ++的cristion In Action中的C ++并发"时由安东尼·威廉姆斯(Anthony Williams),我看到可以通过执行std::thread t1(&Class::function, this, ...);之类的操作来询问std ::线程从另一个线程执行函数. 似乎不可能. 我最想拥有的机制是一种说法,如果我想
10 2023-09-29
编程技术问答社区
QSocketNotifier。不能从另一个线程启用或禁用插座通知器
我尝试构建使用QT的多线程游戏服务器,因此,每个客户端都是基于独立线程的" Qthread".现在,我需要将数据发送到同一游戏室中的其他客户端(在其他线程中).例如,当房主关闭游戏室时,游戏服务器需要发送到同一SOOM中的其他客户的" room_clated"消息,但是有一个错误: qsocketNotifier:套接字通知器无法启用或禁用 另一个线程 ps:我尝试使用罪恶/插槽,但仍然存在错误: qobject:无法为不同的父母创建孩子 线. (父级是qnationsocketEngine(0x161764e8),父母的线程为 clientthread(0x16196f10),当前线程为qthread(0x14a17278) 我该怎么办? 解决方案 看来,您似乎不正确处理Qobject和Qthreads,并且QT抱怨它. 我建议您查看QT文档: thread and qobject ">/li> qObject thread > 快速指
80 2023-09-06
编程技术问答社区
QT线程问题......有东西在拖延GUI的响应
我在QT线程以某种方式停滞了主GUI时遇到问题. 回答第一个问题...是的,Qthread并未分类,并且是"正确的方式". 该线程是长期运行的(不是" do x the the exit"),并且主要循环确实有延迟/睡眠. 线程的主要目的是从其他地方收集数据,构成图像并通过COM端口传输该图像. 我认为有一些编码区域可能会引起问题. IM使用我自己的"睡眠"功能作为MSLEEP(不可用的). 谁能看到下面的代码有任何问题? void SendImageJob::tSleep(int ms) { QElapsedTimer timer; timer.start(); while ((timer.elapsed()
10 2023-09-03
编程技术问答社区
为什么我不能在信号上启动一个QThread?
我想在另一个启动时启动一个qthread,但它不起作用. main.cpp代码 Worker stat_worker; stat_worker.moveToThread(stat_worker.stat_thread); Worker some; some.moveToThread(some.somethread); QObject::connect(stat_worker.stat_thread, SIGNAL(started()), some.somethread, SLOT(start())); QObject::connect(some.somethread, SIGNAL(started()), &some, SLOT(print_some())); stat_worker.stat_thread->start(); worker.h class Worker : public QObject { Q_OBJECT public: exp
8 2023-09-03
编程技术问答社区
在 QObject 之间跨线程连接信号/插槽
我想知道什么是在MainWindow的Contructor中创建的两个QoBject之间连接信号/插槽的最佳实践,但稍后移动到不同的线程...默认连接似乎不起作用,然后当我与选项Qt::Directconnection连接时事情开始工作...但是有时信号/插槽失败了...以下是我的代码模式.请让我知道我是否需要更改我的班级设计... mainwindow.cpp MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), { myObjectA = new ObjectA; myObjectB = new ObjectB; connect( myObjectA,SIGNAL(signalA()),myObjectB,SLOT(slotB()) ); myObjectA.initiateProcess(); myObjectB.initiateProcess(); }
8 2023-09-03
编程技术问答社区
如何将自己的消息循环和 Qt 事件循环结合起来?
我有一个从QThread: class MyClass : public QThread派生的类.在运行方法中,我有"我自己的"消息循环: run() { // exec(); // while not reached while (_runMessageLoop && ...) { hr = CallDispatch(.....); if (hr== 0) QThread::msleep(100); // QCoreApplication::processEvents(); // Does not work } } 由于未执行exec(),我有 no QT事件循环.这显然会导致信号/插槽不正确工作 . 有没有机会将QT和我自己的消息循环组合在一起?,还是我需要经常发射计时器才能做我在无限循环中完成的工作? 解决方案 正确的方式" qt-wise"是使用计时器,让QT管理事件循环. 如果您需要依靠外部事物,则可以使用
2 2023-09-03
编程技术问答社区
我能否创建一个不是类的字段成员的新样式 pyqt 信号?
因此,对于我可以看到使用pyqt4创建样式信号的唯一方法如下: class MyCustomClass(QtCore.QThread): custom_signal = QtCore.pyqtSignal(str) 我的牛肉是,如果我在其他任何地方声明该信号,pyqt就会向我扔一个错误,以了解Custom_signal如何没有Connect()函数. 我想创建一个辅助功能,以帮助删除样板/重复代码时,当我想做一些简单的事情时:启动新线程,在该线程中进行工作,将结果作为信号发送到对象.但是,当我需要在类中定义信号时很难. 有什么方法使信号只是局部变量? 解决方案 不确定我是否正确理解您的问题,但是从您的评论中,这听起来足以定义适用于任何类型的信号?如果是这样,您可以使用对象作为类型: class MyCustomClass(QtCore.QThread): custom_signal = QtCore.pyqtSignal(object)
2 2023-09-03
编程技术问答社区