我有一个 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()