Qt线程 两种处理方式,一种重写run,一种moveToThread
近日,使用QThread,一些问题百思不得其解,看过大牛的文章,恍然大悟啊。
原文 http://hi.baidu.com/dbzhang800/item/c14c97dd15318d17e1f46f41
在文章开始之前加注一点,为和我一样Qt水平不高的朋友提醒一下。QThread::wait(),一直以来我以为它阻塞的是QThread对象,可是我现在明白,原来阻塞的是这个对象所在的线程(通常是主线程)。
bool QThread::wait ( unsigned long time = ULONG_MAX )
Blocks the thread until either of these conditions is met:
The thread associated with this QThread object has finished execution (i.e. when it returns from run()). This function will return true if the thread has finished. It also returns true if the thread has not been started yet.
time milliseconds has elapsed. If time is ULONG_MAX (the default), then the wait will never timeout (the thread must return from run()). This function will return false if the wait timed out.
以下红色部分为我添加。
起源
昨天不小心看到Qt开发人员( Bradley T. Hughes)Blog中的一片文章
you are-doing-it-wrong 。 结果看得头昏脑胀:好歹也自学了近1年的Qt,也一直很小心、很认真地阅读Qt和manual和例子等资料,却被突然告知,QThread的正确使用方法是一种自己从没见过,而且Qt manual、example、书籍中都没有提到过的一种方法。到底怎么了…
莫非manual、exmaple以及资料中的介绍都是错的??
认真看看其他的人的评论,总算理清了一点头绪。所有事情源于 QThread 的事件循环!
QThread 的两种使用方法
1. 不使用事件循环。这是官方的 Manual 、example 以及相关书籍中都介绍的一种的方法。
a. 子类化 QThread
b. 重载 run 函数,run函数内有一个 while 或 for 的死循环
c. 设置一个标记为来控制死循环的退出。