QT QThread 学习笔记

来源:互联网 发布:软件靠流量赚钱 编辑:程序博客网 时间:2024/05/21 19:30

今天学习了QThread的用法,也阅读了许多网上大家给的意见,以我现在的理解大致就有两点

一:创建一个类继承QThread类,需要实现的功能只需要重载QThread的run(),函数就可以了,调用的时候只需要调用创建类的start()函数,可是这时,笔者我便遇到了第一个问题,在之前用C,C++在控制台环境下开发的时候,创建两个线程,线程间的通信是一个非常简单的简单的过程,只需要创建一个全局的变量就可以了,可是在QT上使用QThread来创建线程,感觉线程间的通信就成了个问题,这时候便用到了自定义信号,在另外的线程中定义一个slot来接收发出的信号,这样便完成了线程间通信。

(可是在这里我又遇到了一个问题,我用一个类创建了两个线程对象,分别调用他们的start()函数,并没有达到多线程并行的效果,而是第二个线程函数等待第一个线程函数运行完成后再运行的)大致代码如下

class Fun : public QThread

{

void run(){ qDebug()<<"我是一个线程函数";  }

};

void mian()

{

Fun *fun = new Fun;

fun->start();


}



二:可以直接创建一个类,继承QObject,在主函数里面将这个类创建的对象的槽函数,与QThread创建的对象的start()信号connect()起来,之前要用

moveToThread();这样也可以大致代码如下
   class Fun:public QObject
{
    Q_OBJECT
public slots:
void show(){  qDebug()<<"我是一个线程函数的槽函数"; }

};
void main()
{
Fun *fun = new Fun;
QThread *thread = new QThread;
fun->moveToThread(thread);
connect(thread,SIGNAL(start()),fun,SLOT(show()));
thread->start();
}

原创粉丝点击