从for循环块UI启动线程

Pri*_*alj 0 c++ user-interface qt multithreading block

我正在压缩视频,将来我想一次压缩多个帧.我有一个线程,我称之为在每个帧上工作 - 这就是我在UI类中进行循环的原因.问题是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());
}
Run Code Online (Sandbox Code Playgroud)

Kam*_*mek 7

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

来自Qt docs:

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

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

  • @PrimožKralj如果你想一次做多件事,你需要超过1个线程.请注意,不受控制的线程数是一个坏主意,并且比在单个线程中执行它更慢.您可能需要诸如任务池,生产者 - 消费者队列等之类的东西. (2认同)