0

Qt マルチスレッドと Qt 4.8 でのイベント ループを理解するのに役立つ説明を探しています。また、私は一般的にスレッド化が初めてなので、それが私の問題の一部であると付け加えます。

私の現在の状況は、QTMultiMedia-QAudioOutput を使用して頻繁にサウンドを再生する必要がある Qt アプリを持っていることです。MainGuiAudioWorkerの 2 つのクラスがあります。AudioWorker を呼び出してサウンドを "play()" したいことがよくあります。

サウンドが再生される前にプロセスが終了しないように、どうやら QAudioOutput にはイベント ループが必要です。したがって、スレッドが役立つことを理解しています。

スレッドを正しく理解していれば、生成されたスレッドは、何らかの方法で切り離されない限り、それを作成した関数よりも長く生きることはできませんか? MainGui クラスでサウンドを再生する通知を受信し、AudioWorker で play() を呼び出すスロット接続を介して新しいスレッドを生成した場合、MainGui 通知関数が終了すると、イベント ループを持つスレッドが終了することはありませんか? これが事実である場合、どちらにしても MainGui はイベント ループを必要とするでしょうか?

確かに私は何かが欠けていますか?どうにかしてスレッドをデタッチする必要がありますか?デタッチに関する Qt ドキュメントにはあまり記載されていません。単純な音を鳴らすためだけに、このプロセス全体が過剰に思えます。


更新しました

play() 関数で QThread を作成することで問題を解決しました。スレッドは、シグナルを送信するまで途中で終了しません。

https://nachtimwald.com/2015/05/02/effective-threading-using-qt/で、隠れているが素晴らしい例を見つけました。

4

1 に答える 1