Qt多线程一

Qt 多 线 程

何谓线程?

线程与并行处理任务息息相关,就像进程一样。那么,线程与进程有什么区别呢?当你在电子表格上进行数据结算的时候,在相同的桌面上可能有一个播放器正在播放你最喜欢的歌曲。这是一个两个进程并行工作的例子:一个进程运行电子表格程序;另一个进程运行一个媒体播放器。这种情况最适合用多任务这个词来描述。进一步观察媒体播放器,你会发现在这个进程内,又存在并行的工作。当媒体播放器向音频驱动发送音乐数据的时候,用户界面上与之相关的信息不断地进行更新。这就是单个进程内的并行线程。


每个程序启动后就会拥有一个线程。该线程称为”主线程”(在Qt应用程序中也叫”GUI线程”)。Qt GUI必须运行在此线程上。所有的图形元件和几个相关的类,如QPixmap,不能工作于非主线程中。非主线程通常称为”工作者线程”,因为它主要处理从主线程中卸下的一些工作

Qt线程类

Qt 包含下面一些线程相关的类:
QThread 提供了开始一个新线程的方法
QThreadStorage 提供逐线程数据存储
QMutex 提供相互排斥的锁,或互斥量
QMutexLocker 是一个便利类,它可以自动对QMutex加锁与解锁
QReadWriterLock 提供了一个可以同时读操作的锁
QReadLockerQWriteLocker 是便利类,它自动对QReadWriteLock加锁与解锁
QSemaphore 提供了一个整型信号量,是互斥量的泛化
QWaitCondition 提供了一种方法,使得线程可以在被另外线程唤醒之前一直休眠。

Qt创建线程

线程类


最重要的类是QThread,也就是说要开始一个新的线程,就是开始执行你重新实现的QThread::run()。这和Java的线程类很相似

qt app 提供多线程步骤:子类化QThread 和重新实现QThread 的纯虚函数run().,通过调用start来call run机制

Qt线程中有一个公共的抽象类QThread ,所有的线程都是从这个QThread抽象类中派生的,要实现QThread中的纯虚函数run(),run()函数是通过start()函数来实现调用的。  


#include <QApplication>


#include <QThread>
#include <QDebug>
class mythread:public QThread
{


protected:
    virtual void run();//deprive from parent class
};


void mythread::run()
{
    for(char i=0;i<3;i++)
    {
        sleep(1);//sleep 1s
        qDebug()<<("haha--worker thread run !!!ID is")<<mythread().currentThreadId();//
      }
}
int  main(int argc,char **argv)
{
    QApplication a(argc, argv);
    mythread mythreadA;


    mythreadA.start();//to aumatic call run() function


/*    qDebug()<<("haha--GUI thread run !!!");//
    qDebug()<<("ID is");
    qDebug()<<a.thread()->currentThreadId();
*/
   // qDebug()<<("haha--GUI thread run !!!,ID is ")<<a.thread()->currentThreadId();
    //wait thread exit
    mythreadA.wait();//let child thread first run ,and exit
     qDebug()<<("haha--GUI thread run !!!,ID is ")<<a.thread()->currentThreadId();


    return 0;

}

运行结果:

 MyThread]# ./MyThread 
haha--worker thread run !!!ID is 3077102480 
haha--worker thread run !!!ID is 3077102480 
haha--worker thread run !!!ID is 3077102480 
haha--GUI thread run !!!,ID is  3085875792 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值