我正在压缩视频,将来我想一次压缩多个帧。我有一个线程,我称之为在每个帧上工作 - 这就是我在UI类中进行循环的原因。问题是UI被阻止了。为什么?这是因为我从for循环调用线程吗?
导致UI阻止的代码(Dialog.cpp):
for(int i=0; i<nFrames; i++)
{
//grab next frame from video source
myThread.setFrame(newFrame);
myThread.start();
myThread.wait();
result.append(myThread.GetResult());
}
答案 0 :(得分:7)
您正在致电wait
,为什么您认为wait
不会阻止ui?
来自Qt docs:
阻止线程,直到满足以下任一条件:
与此QThread对象关联的线程已完成执行 (即从run()返回时)。如果,此函数将返回true 线程已经完成。如果线程没有,它也返回true 已经开始了。时间毫秒已过。如果时间是ULONG_MAX (默认值),然后等待永远不会超时(线程必须 从run()返回)。如果等待时间,此函数将返回false 进行。
答案 1 :(得分:2)
bool QThread :: wait(unsigned long time = ULONG_MAX)
阻止线程,直到满足以下任一条件:
与此QThread对象关联的线程已完成执行(即从run()返回时)。
...
这提供了与POSIX pthread_join ()类似的功能 功能
您不应在此使用wait
。