一个 QThread 类的对象管理一个线程。在设计多线程程序的时候,需要从 QThread 继承定义线程类,并重新定义 QThread 的虚函数 run(),在函数 run() 里处理线程的事件循环。
应用程序的线程称为主线程,创建的其他线程称为工作线程。一般会在主线程里创建工作线程,并用函数 start() 开始执行工作线程的任务。函数 start() 会在其内部调用函数 run() 进入工作线程的事件循环,函数 run() 的程序体一般是一个无限循环,可以在函数 run() 里调用函数 exit() 或 quit() 结束线程的事件循环,或在主线程里调用函数 terminate() 强制结束线程。
QThread 常用 API
函数 | 功能 |
---|---|
run() | 线程的入口函数 |
start() | 通过调用 run() 开始执行线程。操作系统将根据优先级参数调度线程。如果线程已经在运行,这个函数什么也不做 |
cuttentThread() | 返回一个指向管理当前执行线程的QThread的指针 |
isRunning() | 如果线程正在运行则返回 true,否则返回 false |
sleep() / msleep() / usleep() | 使线程休眠,单位为秒 / 毫秒 / 微秒 |
wait() | 阻塞线程,直到满足以下任何一个条件: 与此 QThread 对象关联的线程已经完成执行(即当它从run() 返回时)。如果线程已经完成,这个函数将返回 true。如果线程尚未启动,它也返回 true。 已经过了几毫秒。如果时间是 ULONG_MAX(默认值),那么等待永远不会超时(现成必须从 run() 返回)。如果等待超时,此函数将返回false。 |
terminate() | 终止线程的执行。线程可以立即终止,也可以不立即终止,取决于操作系统的调度策略。在 terminate() 之后使用 QThread::wait() 来确保。 |
finished() | 当线程结束时会发出该信号,可以通过该信号来实现线程的清理工作。 |