一、继承QThread,实现void run() 函数。
Worker定义:
class Worker:public QThread
{
public:
Worker();
void run() override;
};
void Worker::run()
{
while(1)
{
qDebug()<<"run:"<<currentThreadId();
sleep(2);
}
}
二、继承QObject,调用moveToThread函数
这种方式槽函数被信号触发时,将在线程中执行。
该类的事件处理函数将全部在该线程中执行。
Worker定义:
class Worker:public QObject
{
public:
Worker();
public slots:
void doWork();
};
void Worker::doWork()
{
qDebug()<<QThread::currentThreadId()<<endl;
}
mainWindow中使用Worker:
Worker* w = new Worker;
QThread* t = new QThread;
w->moveToThread(t);
t->start();
//必须使用connect,不能直接调用doWork()
connect(this,&MainWindow::mySignal,w,&Worker::doWork);
qDebug()<<"mainwindow:"<<QThread::currentThreadId()<<endl;
emit mySignal();