0

我正在压缩视频,将来我想一次压缩多个帧。我有一个线程,我调用它来处理每个帧 - 这就是为什么我的 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());
}
4

2 回答 2

7

你在打电话wait,为什么你会期望它wait不会阻止 ui?

来自 Qt 文档:

阻塞线程,直到满足以下任一条件:

与此 QThread 对象关联的线程已完成执行(即,当它从 run() 返回时)。如果线程已完成,此函数将返回 true。如果线程尚未启动,它也会返回 true。time 毫秒已经过去。如果时间为 ULONG_MAX(默认值),则等待永远不会超时(线程必须从 run() 返回)。如果等待超时,此函数将返回 false。

于 2013-01-04T15:19:29.650 回答
2

来自文档:

bool QThread::wait ( 无符号长时间 = ULONG_MAX )

阻塞线程,直到满足以下任一条件:

与此 QThread 对象关联的线程已完成执行(即,当它从 run() 返回时)。

...

这提供了与 POSIX pthread_join () 函数类似的功能。

你不应该wait在这里使用。

于 2013-01-04T15:20:23.247 回答