标题:QThread的迷惑
作者:kyosold622
日期:2022-03-22 19:53
内容:
我有一个 work 任务类,准备要在线程中跑的,现在是需要有三个 work 类,在三个单独的线程去跑,但是我发现每次的第一个线程会包括后面的任务,导致第1个线程跑了三次,第二个线程跑了2次,最后一个跑一次,这是怎么回事,代码如下:
work:
#ifndef WORK_H
#define WORK_H
#include
class Work : public QObject
{
Q_OBJECT
public:
explicit Work(QObject *parent = nullptr);
public slots:
void startWork(QString id);
signals:
void sigWorkFinished(QString id);
};
#endif // WORK_H
#include "work.h"
#include
#include
Work::Work(QObject *parent)
: QObject{parent}
{
}
void Work::startWork(QString id)
{
qDebug()
#1 [fsu0413 03-22 20:19]
你emit了3个sigStartWork
第一个的时候只有0
第二个的时候有0和1,并且都响应了
第三个的时候有0、1、2,并且都响应了
#2 [fsu0413 03-22 20:22]
QThreadPool我没用过
#3 回 fsu0413 的帖子 [kyosold622 03-23 09:34]
fsu0413:你emit了3个sigStartWork
第一个的时候只有0
第二个的时候有0和1,并且都响应了
第三个的时候有0、1、2,并且都响应了 (2022-03-22 20:19)
多谢,我大概明白你的意思了,看来我要在 work 里加个flag 来判断自己是否已经运行了,如果已经运行了就return;
那像这种场景,标准的写法是个什么样子呢??另外,这个 new QThread 出来的这个指针是在 thread.wait() 之后 delete thread 么?我试着这样,会报错。
#4 回 kyosold622 的帖子 [fsu0413 03-25 08:37]
kyosold622:多谢,我大概明白你的意思了,看来我要在 work 里加个flag 来判断自己是否已经运行了,如果已经运行了就return;
那像这种场景,标准的写法是个什么样子呢??另外,这个 new QThread 出来的这个指针是在 thread.wait() 之后 delete thread 么?我试着这样,会报错。
(2022-03-23 09:34)
就3个线程创建完之后再调用sigStartWork就完事了。。。根本用不到flag
QThread::wait要返回true才能delete