背景:
在主线程中调用创建的play线程来进行视频播放,在停止的时候,停止画面与设置的停止画面不一致。
相关介绍:
quit():让线程可以安全的退出,原理是告诉事件循环return 0,相当于exit(0)。
wait():阻塞线程。当接收到exec()返回的0后,返回true,停止阻塞。
exec():事件循环,意义是在线程执行结束后,不会被销毁,保持挂起状态,当接收到销毁线程信号后,成功退出则return 0。
terminate():中断当前时间片进行的操作,直接结束线程。(内存,锁等不会被释放)
流程:
在主线程(main线程)中接收到用户点击stop按钮的请求,向play线程发送quit()的信号。
在play线程run()函数中,默认有exec()函数,当exec函数接收到quit信号后,停止循环,return 0 。
在主线程的wait()函数接收到return 0之后,停止阻塞,继续执行主线程。
图:
其他:关于qt5中的线程的其他理解。
在qt5中,new Qthread操作本质上并不是创建了一个线程,而是创建了一个类,这个类具有线程的执行操作。创建多个线程的情况下,主线程是这多个线程的执行者,创建的这些线程像是规划者。创建的这些线程意义是让主线程可以按照一定顺序来执行这些线程的执行操作。