正在为循环块UI从启动线程

Starting thread from for loop blocks UI

本文关键字:启动 线程 UI 循环      更新时间:2023-10-16

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