目录
一.QThread的常见特性
run()是线程的入口,就像main()对于应用程序的作用。QThread中对run()的默认实现调用了exec(),从而创建一个QEventLoop对象,由其处理该线程事件队列(每一个线程都有一个属于自己的事件队列)中的事件。简单用代码描述如下:
void QThread::run()
{
(void) exec();
}
int QThread::exec()
{
//...
QEventLoop eventLoop;
int returnCode = eventLoop.exec();
//...
return returnCode;
}
int QEventLoop::exec(ProcessEventsFlags flags)
{
//...
while (!d->exit) {
while (!posted_event_queue_is_empty) {
process_next_posted_event();
}
}
//...
}
由此可见,exec()在其内部不断做着循环遍历事件队列的工作,调用QThread的quit()或exit()方法使停止工作,尽量不要使用terminate(),该方法过于粗暴,造成资源不能释放,甚至互斥锁还处于加锁状态。
二.QThread旧的使用方式
#include "QThread"
#include &