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) bool wait(unsigned long time) | 线程是否结束 线程是否正在运行 返回线程的优先级 设置线程的优先级 退出线程的事件循环,0表示成功退出,否则表示有错误 阻止线程执行,直到线程结束或等待时间超过time毫秒 |
公共槽函数 | void quit() void start(Priority priority) void terminate() | 退出线程的事件循环 内部调用run()开始执行线程,操作系统根据priority参数进行调度 终止线程的运行,但不是立即结束线程,而是等待操作系统结束。使用terminate()之后应使用wait() |
信号 | void finished() void started() | 在线程就要结束时发射此信号 在线程开始执行、run()函数被调用之前发射此信号 |
静态公共成员 | int idealThreadCount() void msleep(unsigned long msecs) void sleep(unsigned long secs) void usleep(unsigned long usecs) | 返回系统上能运行的线程的理想个数 强制当前线程休眠msecs毫秒 强制当前线程休眠secs秒 强制当前线程休眠usecs微秒 |
保护函数 | virtual void run() int exec() | start()调用run()函数开始线程任务的执行,所以在run()函数里实现线程的任务功能 由run()函数调用,进入线程的事件循环,等待exit()退出 |
QThread是QObject的子类,所以可以使用信号与槽机制。QThread自身定义了started()和finished()两个信号,started()信号在线程开始执行之前发射,也就是在run()函数被调用之前,finished()信号在线程就要结束时发射。