Jea*_*Luc 6 qt4 visual-studio-2010 qthread
我最近开始学习QThreads,我有一个程序在一个单独的线程中运行4个小时的循环(这样我可以继续使用GUI).我所追求的是,当用户点击暂停qpushbutton时暂停/暂停线程的东西,当用户点击恢复qpushbutton时,程序应该恢复.我怎么能实现这个目标?
我正在考虑从我的主班发送信号; 但是,我不确定如何在线程中处理它们.是否可以处理线程中主类发送的信号?目前,我有线程向主类发出信号,并且工作正常,但我不知道如何从主类发送线程,并在线程中接收它们.
Kam*_*mek 15
好的,所以我建议你制作内部线程变量,在你的循环的每个步骤中检查QWaitCondition它以恢复它.
QWaitCondition(参见Qt docs)暂停线程执行创建简历方法,您将关闭"暂停字段"并唤醒QWaitCondition
class MyWorker: public QThread
{
private:
QMutex sync;
QWaitCondition pauseCond;
bool pause;
public:
MyWorker(...): pause(false) {}
void resume()
{
sync.lock();
pause = false;
sync.unlock();
pauseCond.wakeAll();
}
void pause()
{
sync.lock();
pause = true;
sync.unlock();
}
protected:
void run()
{
while(someCondition) // gues it's your loop
{
sync.lock();
if(pause)
pauseCond.wait(&sync); // in this place, your thread will stop to execute until someone calls resume
sync.unlock();
// do your operation
}
}
};
Run Code Online (Sandbox Code Playgroud)