1、主界面有两个按钮,点击“开始”按钮,触发一个信号,然后子线程打印一条信息,点击“结束”按钮,关闭线程
2、线程相关类定义如下
3、线程类变量定义如下
4、线程启动、信号槽及实现如下。在构造函数中通过thread.start()启动线程。
5、运行程序,并查看程序输出。点击一下“开始”按钮,会触发线程打印一条日志,再点击一下“开始”按钮,线程再次打印一条日志。点击“结束”按钮,打印线程结束。这时再点击“开始”按钮,线程将不再打印日志
6、修改线程打印函数为一个for循环,并在每次循环后sleep(5)秒
7、运行程序,然后点击“开始”按钮,线程开始打印日志。打印一两条后点击“结束”按钮,程序并没有停止打印日志,而是等到for循环结束后,才打印线程结束的日志。这说明线程并没有结束
8、修改线程结束函数如下,使用terminal函数。再次执行相同的步骤。线程可以正常退出,但是程序关闭时崩溃。
9、修改线程打印函数,增加flag标识,在线程退出时,修改该flag标识,达到for循环退出的效果。这样线程可以正常退出,而且程序关闭时也不会崩溃