【发布时间】:2013-01-04 15:12:40
【问题描述】:
我正在压缩视频,将来我想一次压缩多个帧。我有一个线程,我调用它来处理每个帧 - 这就是为什么我的 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() ,因为没有它,for 循环将立即重新启动线程,不会产生任何结果。这不正确吗?
-
问题是如果您立即阻止等待线程完成,那么线程根本没有任何意义。您的单线程 UI 阻塞并让步到第二个线程并继续让步,直到任务在第二个线程中完成。在这种情况下,您可以只完成主线程的工作。您不能在这样的循环中创建线程。您可能想使用信号和插槽、QtConcurrent 或线程池来完成此操作,但我没有时间解释这两种解决方案。
-
不用解释了,我自己去读。感谢您提及!
标签: c++ multithreading qt user-interface block