学习C++已经有一段时间了,然而对多线程仅仅停留在概念的阶段,可面试时却经常遇到这样的面试问题。为了加强一下面试的能力,这里先借Qt里面的多线程简单的对其做一个了解,可以在面试的时候说出点道道来。
一、Qt中多线程的引入
这里,我不想用定义来说明什么是多线程,定义不形象,而且只有在大神向菜鸟装13的时候才会用到定义。这就是多线程,记住这个例子:
如下所示:
前两个for循环即为 创建多线程,运行多线程,也就是多个void workThread::run()中的循环同时进行,也就是同时运行了多个线程,所以称之为多线程。
void ThreadWidget::slotsStart()
{
<span style="white-space:pre"> </span>for (int i = 0; i < MAXSIZE; i++)
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>workthread[i] = new<span style="white-space:pre"> </span>WorkThread();
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>for (int i = 0; i < MAXSIZE; i++)
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>workthread[i]->start();
}
<span style="white-space:pre"> </span>ui.pushButton_1->setEnabled(false);
<span style="white-space:pre"> </span>ui.pushButton_2->setEnabled(true);
}
二、QT中多线程的创建
上例代码给我了一个很好的参考,也就是说在Qt中想要实现多线程,仅仅只需要2步:
(1)#include <QThread>
(2)new QThread
(另外,当执行start的时候即为运行run(),run函数只要重写,就可以把其中的程序实现了多线程)
三、Qt中多线程的成员函数
workthread[i]->terminate();<span style="white-space:pre"> </span>//调用QThread基类的terminate()函数,依次终止
workthread[i]->wait(); //调用QThread基类的wait()函数,使得线程阻塞等待直到退出或超时
workthread[i]->start(); //调用run()函数
四、实例
参考Qt5开发实例第二版