我有一个 GUI 线程,我在其中调用write(QString text)
另一个MyQThread
.
MyQthread
包含QMutex mutex
和QList<QString> list
。以下是 的write()
和run()
方法MyQThread
:
void MyQThread::write(QString text)
{
mutex.lock();
list.append(text); //Point C
mutex.unlock();
start(); //Point D
}
void MyQThread::run()
{
mutex.lock();
while(!list.isEmpty())
{
QString text = list.takeFirst();
mutex.unlock();
...//do something
mutex.lock(); //Point A
}
mutex.unlock(); //Point B
}
例如,我们在“A 点”。在此之后,我们正在检查列表,它是空的,所以我们要去“点 B”。此时write()
调用,互斥锁仍处于锁定状态,因此 GUI 线程在“点 C”之前等待。
现在我们在“点 B”,在这个 GUI 线程被解锁并调用 start()(“点 D”)之后。
有没有可能,在'点 D' MyQThread 仍在运行?
在这种情况下,调用start()
什么都不做。并且在下一次调用之前list
不会处理新添加的项目。
附加信息。就我而言,这里只有一个 MyQThread 实例。run()
write()