многопоточность — запустить новый поток Qt Stack Overflow

я хочу запустить код в отдельном потоке основного приложения, для этого я создал файл:

thread2.h

#ifndef THREAD2_H
#define THREAD2_H
#include <QThread>

class thread2 : public QThread
{
Q_OBJECT

public:
thread2();

protected:
void run();

};

#endif // THREAD2_H

thread2.cpp

#include "thread2.h"
thread2::thread2()
{
//qDebug("dfd");
}
void thread2::run()
{
int test = 0;
}

И основной файл называется main.cpp

#include <QApplication>
#include <QThread>
#include "thread1.cpp"#include "thread2.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);

thread2::run();

return a.exec();
}

Но это не работает …

Qt Creator говорит мне: «не может вызвать функцию-член« virtual void thread2 :: run () »без объекта»

Спасибо !

2

Решение

Вызывая это так: thread2::run() как бы вы назвали static функция, которая run() не является.

Кроме того, чтобы начать поток, вы не вызываете run() метод явно, вам нужно создать объект потока и вызвать start() на нем, который должен ссылаться на ваш run() Метод в соответствующей теме:

thread2 thread;
thread.start()
...
7

Другие решения

Простой класс Thread, который позволяет передавать указатель на функцию, выглядит следующим образом:

typedef struct TThread_tag{
int (*funct)(int, void*);
char* Name;
int Flags;
}TThread;

class Thread : public QThread {
public:
TThread ThreadInfoParm;
void setFunction(TThread* ThreadInfoIn)
{
ThreadInfoParm.funct = ThreadInfoIn->funct;
}
protected:
void run()
{
ThreadInfoParm.funct(0, 0);
}
};

TThread* ThreadInfo = (TThread*)Parameter;
//Create the thread objedt
Thread* thread = new Thread;
thread->setFunction(ThreadInfo);//Set the thread info
thread->start();  //start the thread
2

По вопросам рекламы [email protected]