我正在压缩视频,未来我想一次压缩多个帧。我有一个线程,我称它为每个框架上的工作 - 这就是为什么我有我的UI类循环。问题在于UI被阻止。为什么?这是因为我是从for循环调用线程吗?从循环块开始线程UI
代码导致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(),因为没有它,线程将立即通过for循环重新启动,不会产生任何结果。这不正确吗? –
问题是,如果您立即阻止等待线程完成,线程中根本没有任何指向。您的单个线程化UI会阻塞并屈服到第二个线程,并继续屈服,直到第二个线程中的任务完成。在这种情况下,你可以完成工作的主线程。你不能像这样在循环中创建一个线程。您可能想要使用信号和插槽,QtConcurrent或线程池来完成此任务,但我没有时间来解释这两种解决方案。 – drescherjm