我正在压缩视频,将来我想一次压缩多个帧。我有一个线程,我调用它来处理每个帧——这就是为什么我在UI类中有for循环。问题是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());
}
您正在调用wait
,为什么wait
不会阻止ui?
来自Qt文档:
阻塞线程,直到满足以下任一条件:
与此QThread对象关联的线程已完成执行(即当它从run((返回时(。如果线程已完成。如果线程没有尚未启动。已经过了时间毫秒。如果时间为ULONG_MAX(默认值(,则等待永远不会超时(线程必须从run((返回(。如果等待超时,此函数将返回false出来
来自文档:
bool QThread::wait(无符号长时间=ULONG_MAX(
阻塞线程,直到满足以下任一条件:
与此QThread对象关联的线程已完成执行(即,当它从run((返回时(。
这提供了与POSIX类似的功能pthread_join((作用
你不应该在这里使用wait
。