小编evd*_*vdc的帖子

用Qt进行简单的多线程处理:我这样做了吗?

我是StackOverflow的新手,想知道我是否正确行事:

我正在编写一个简单的Qt应用程序来测试多线程(我也是一个全新的东西).我创建了一个包含小部件的MainWindow,以及一个继承QThread并覆盖run()方法的类MyThread.

应用程序只显示两个按钮,"启动计数器"和"停止计数器",以及一个文本字段.当按下"启动计数器"时,创建工作线程并在后台运行,在while循环中连续递增计数器并用更新的值发信号通知主线程(GUI所在的位置).按下"停止计数器"时,会向主线程发送一个停止while循环的信号,计数器停止,直到再次按下"启动计数器".

这非常好用......但这是最好的方法吗?我是新手,并阅读了很多人说"不要继承QThread"和其他人说"子类QThread",这有点令人困惑.如果这不是实现这种事情的最佳方式(在后台线程中使用"start"和"stop"按钮运行计算密集型循环),那是什么?如果我做错了,我该怎么做呢?我不想学习错误的方法.

谢谢!这是代码:

MyThread.h

#ifndef MYTHREAD_H
#define MYTHREAD_H

#include <QThread>
#include <QMutex>

class MyThread : public QThread
{
   Q_OBJECT

public slots:
    void stopRunning();

protected:
   virtual void run();

signals:
   void signalValueUpdated(QString);

private:
    bool isRunning;

};
Run Code Online (Sandbox Code Playgroud)

MyThread.cpp

#include "MyThread.h"
#include <QString>

void MyThread::run()
{
    qDebug("Thread id inside run %d",(int)QThread::currentThreadId());

    static int value=0; //If this is not static, then it is reset to 0 every time this function is called.
    isRunning = 1;
    while(isRunning == 1)
    {
        QString string = QString("value: …
Run Code Online (Sandbox Code Playgroud)

c++ multithreading qt4 qthread

8
推荐指数
1
解决办法
2万
查看次数

标签 统计

c++ ×1

multithreading ×1

qt4 ×1

qthread ×1