Multithreading 如何使用QThread暂停线程工作线程?

Multithreading 如何使用QThread暂停线程工作线程?,multithreading,qt,qthread,Multithreading,Qt,Qthread,首先,请原谅我,如果有一个明显的解决方案,我对线程的使用是完全陌生的(并且只知道一点理论) 我目前正在开发一个应用程序,我想在其中使用线程。基本上,它检索数据并用Qt实时显示在图形上 我在上遵循了这篇文章的指导原则,但接下来我关心一些细节 基本上,我想实现一个暂停,这将停止实时查询和更新,然后可以在以后继续 目前,我的班级是这样的: class DataProcessor : public QObject{ Q_OBJECT public: DataProcessor();

首先,请原谅我,如果有一个明显的解决方案,我对线程的使用是完全陌生的(并且只知道一点理论)

我目前正在开发一个应用程序,我想在其中使用线程。基本上,它检索数据并用Qt实时显示在图形上

我在上遵循了这篇文章的指导原则,但接下来我关心一些细节

基本上,我想实现一个暂停,这将停止实时查询和更新,然后可以在以后继续

目前,我的班级是这样的:

class DataProcessor : public QObject{
    Q_OBJECT

public:
    DataProcessor();
    ~DataProcessor();

//Internal details

public slots:
    //mapped to the started() signal of a QThread
    void process();

signals:
    void finished();
    void error(QString error);
}
我想知道如何实现暂停功能。在阅读了布鲁斯·道森(Bruce Dawson)在赞扬懒惰的帖子后,我注意到了一些我应该避免的方法(最重要的是,避免忙碌的等待)

然后,它不太适合我的需要,因为Bruce谈到等待另一个线程退出其关键部分。在这里,我只想暂停线程的工作人员对用户输入所做的工作,并以相同的方式重新启动它

我的问题是:如何实现线程代码的有效暂停

我曾想过在我的工作程序中使用一种标志,可以从主界面设置(类似于boolm_paused;),但一旦设置,我不知道如何有效地暂停我的工作程序


注意:这个问题不是我写的,但它准确地描述了我的问题。来源:

在进程方法中使用QWaitCondition,这样可以安全地暂停执行。正如您可能已经知道的,很多人都不鼓励从QThread继承。然而,这似乎是一个需要解决的问题。我自己没有实现这个,只是在一个search@DmitrySazonov你能举个例子吗?我在上面贴了一个链接(可能很难看到)。这种形式的继承实际上并不违反整个“don't over ride run()”设置一个处理代码的对象,将其移动到线程,在signalXYZ()上暂停(停止)代码。您仍然不需要子类化。此外,您可以实现QWaitCondition以确保在另一个线程中更改了某些内容。