я хочу запустить код в отдельном потоке основного приложения, для этого я создал файл:
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 () »без объекта»
Спасибо !
Вызывая это так: thread2::run()
как бы вы назвали static
функция, которая run()
не является.
Кроме того, чтобы начать поток, вы не вызываете run()
метод явно, вам нужно создать объект потока и вызвать start()
на нем, который должен ссылаться на ваш run()
Метод в соответствующей теме:
thread2 thread;
thread.start()
...
Простой класс 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