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

を呼び出していますが、それが ui をブロックしないと考えるwaitのはなぜですか?wait

Qt ドキュメントから:

次の条件のいずれかが満たされるまで、スレッドをブロックします。

この QThread オブジェクトに関連付けられたスレッドは実行を終了しました (つまり、run() から戻ったとき)。スレッドが終了した場合、この関数は true を返します。スレッドがまだ開始されていない場合にも true を返します。time ミリ秒が経過しました。time が ULONG_MAX (デフォルト) の場合、待機はタイムアウトしません (スレッドは run() から戻る必要があります)。待機がタイムアウトした場合、この関数は false を返します。

于 2013-01-04T15:19:29.650 に答える
2

ドキュメントから:

bool QThread::wait ( unsigned long time = ULONG_MAX )

次の条件のいずれかが満たされるまで、スレッドをブロックします。

この QThread オブジェクトに関連付けられたスレッドは実行を終了しました (つまり、run() から戻ったとき)。

...

これは、POSIX pthread_join () 関数と同様の機能を提供します。

ここでは使用しないwaitでください。

于 2013-01-04T15:20:23.247 に答える