我正在壓縮視頻,未來我想一次壓縮多個幀。我有一個線程,我稱它爲每個框架上的工作 - 這就是爲什麼我有我的UI類循環。問題在於UI被阻止。爲什麼?這是因爲我是從for循環調用線程嗎?從循環塊開始線程UI
代碼導致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或線程池來完成此任務,但我沒有時間來解釋這兩種解決方案。 – drescherjm