Qt多线程- QThread 创建多线程程序

QThread 创建多线程程序

QThread 类功能简介

今天说一下 Qt 中的多线程。QThread 类不依赖平台的管理线程的方法。一个 QThread 类的对象管理一个线程,一般从 QThread 继承一个自定义类,并重新定义虚函数 run(),在 run() 函数里实现线程需要完成的任务。

将应用程序的线程称为主线程,额外创建的线程称为工作线程。一般在主线程里创建工作线程,并调用 start() 开始执行工作线程的任务。start() 会在内部调用 run() 函数,进入工作线程的事件循环,在 run() 函数里调用 exit()quit() 可以结束线程的事件循环,或在主线程调用 terminate() 强制结束线程。

QThread 类的主要接口函数、信号和槽函数如下:

类型 函数 功能
公共函数 bool isFinished () 线程是否结束
bool isRunning () 线程是否正在运行
Priority priority () 返回线程的优先级
公共函数 void setPriority (Priority priority) 设置线程优先级
void exit (int returnCode = 0) 退出线程的事件循环,退出代码为 returnCode 0 表示成功,否则表示有错误。
bool wait (unsigned long time) 阻止线程执行,知道线程结束,或等待时间超过时间
公共槽函数 void quit () 退出线程的事件循环,并返回代码 0,等效 exit (0)
void start (priority priority) 内部调用 run() 开始执行线程,操作系统根据优先级参数调度
void terminate () 终止线程运行,但不立刻结束线程,二十等待操作系统结束线程。使用 terminate() 后要 wait()
信号 void finished () 在线程就要结束的时候发射此信号
void started () 在线程开始执行、run() 函数被调用之前发射此信号
静态公共成员 int idealThreadCount () 返回系统上能运行的线程的理想个数
void msleep (unsigned long msecs) 强制当前线程休眠 msecs 毫秒
void sleep (unsigned long secs) 强制当前线程休眠 secs
void usleep (unsigned long usecs) 强制当前线程休眠 usecs 微妙
保护函数 virtual void run () start() 调用 run() 函数开始线程任务的执行,所以在 run() 函数里实现线程的任务功能
int exec () run() 函数调用,进入线程的事件循环,等待 exit() 退出

QThreadQObject 的子类,所以可以使用信号与槽机制。QThread 自身定义了 started()finished() 俩个信号,started() 信号在线程开始执行之前发射,也就是在 run() 函数被调用之前,finished() 信号在线程就要结束的时候发射。

投骰子线程 QDiceThread

作为实例,定义一个投骰子的线程类 QDiceThread,类的声明部分如下:

class QDiceThread : public QThread
{
   
   
    Q_OBJECT
private:
    int     m_seq=0;//掷骰子次数序号
    int     m_diceValue;//骰子点数
    bool    m_Paused=true; //掷一次骰子
    bool    m_stop=false; //停止线程
protected:
    void    run() Q_DECL_OVERRIDE;  //线程任务
public:
    QDiceThread();

    void    diceBegin();//掷一次骰子
    void    dicePause();//暂停
    void    stopThread(); //结束线程
signals:
    void    newValue(int seq,int diceValue); //产生新点数的信号
};
  • 重载虚函数 run(),在此函数里完成线程的主要任务。
  • 自定义 diceBegin()dicePause()stopThread() 三个公共函数用于线程控制,这三个函数由主线程调用。
  • 定义了要给信号 newValue(int seq, int diceValue) 用于在投一次骰子得到新的点数之后发射此信号,由主线程的槽函数相应以获取值。

QDiceThread 类的实现代码如下:

#include 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值