目录
在Qt中,多线程的处理一般是通过QThread类来实现
QThread代表一个在应用程序中可以独立控制的线程,也可以和进程中的其他线程共享数据。QThread对象管理程序中的一个控制线程
一、常用API
run() | 线程入口函数 |
start() | 通过调用run()函数开始执行线程,操作系统根据优先级参数调度线程 若线程已在运行,该函数说明也不做 |
currentThread() | 返回一个指向 管理当前执行线程 的QThread的指针 |
isRunning() | 若线程正在运行返回true,否则返回false |
sleep()/msleep()/usleep() | 实现线程休眠,单位为秒/毫秒/微秒 |
wait() | 阻塞线程,直到满足以下任何一个条件: 与此QThread对象关联的线程已经完成执行(即当它从run()返回时),若线程已经完成,这个函数将返回true;若线程尚未启动,也返回true 已经过了几毫秒,若时间是ULONG_MAX(默认值),那么等待永远也不会超时(线程必须从run()返回)。若等待超时,此函数返回false 与POSIX pthread_join() 函数类似 |
terminate() | 终止线程的执行。线程可以立即终止,也可以不立即终止,取决于操作系统的调度策略。在terminate()之后使用QThread::wait()来确保终止 |
finished() | 当线程结束时会发出该信号,可以通过该信号来实现线程的清理工作 |
创建线程的步骤:
- 自定义一个类,继承于QThread,并且只有一个线程处理函数(和主线程不是同一个线程),这个线程处理函数主要就是重写父类中的 run()函数
- 线程处理函数里面写入需要执行的复杂数据处理
- 启动线程不能直接调用 run() 函数,需要使用对象来调用 start() 函数实现线程启动
- 线程处理函数执行结束后可以定义一个信号来告诉主线程
- 最后关闭线程
代码示例
新建 Qt 项目,设计UI界面如下:
新建一个类,继承于QThread类