1. 引言
多线程对于需要处理耗时任务的应用很有用,一方面响应用户操作、更新界面显示,另一方面在“后台”进行耗时操作,比如大量运算、复制大文件、网络传输等。
使用Qt框架开发应用程序时,使用QThread类可以方便快捷地创建管理多线程。而多线程之间的通信也可使用Qt特有的“信号-槽”机制实现。
下面的说明以文件复制为例。主线程负责提供交互界面,显示复制进度等;子线程负责复制文件。最后附有可以执行的代码。
2. QThread使用方法1——重写run()函数
第一种使用方法是自己写一个类继承QThread,并重写其run()
函数。
大家知道,C/C++程序都是从main()
函数开始执行的。main()
函数其实就是主进程的入口,main()
函数退出了,则主进程退出,整个进程也就结束了。
而对于使用Qthread创建的进程而言,run()
函数则是新线程的入口,run()
函数退出,意味着线程的终止。复制文件的功能,就是在run()函数中执行的。
下面举个文件复制的例子。自定义一个类,继承自Qthread
CopyFileThread: public QThread
{
Q_OBJECT
public:
CopyFileThread(QObject * parent = 0);
protected:
void run(); // 新线程入口
// 省略掉