マルチスレッドを実行するアプリケーションを開発しています。私のワーカースレッドの1つが、ウィジェットに画像を表示します。別のスレッドがサウンドを再生します。ボタンクリックイベントでスレッドを停止/一時停止/一時停止/スリープしたい。ビデオプレーヤーの再生/一時停止ボタンをクリックしたときと同じです。スレッド化にpthreadライブラリを使用して、Linuxプラットフォーム上のC++でアプリケーションを開発しています。
スレッドの一時停止/一時停止を実現する方法を誰かに教えてもらえますか?
これを行うには、ミューテックス、条件変数、および共有フラグ変数を使用できます。これらがグローバルに定義されていると仮定しましょう。
pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
int play = 0;
再生コードは次のように構成できます。
for(;;) { /* Playback loop */
pthread_mutex_lock(&lock);
while(!play) { /* We're paused */
pthread_cond_wait(&cond, &lock); /* Wait for play signal */
}
pthread_mutex_unlock(&lock);
/* Continue playback */
}
次に、プレイするには次のようにします。
pthread_mutex_lock(&lock);
play = 1;
pthread_cond_signal(&cond);
pthread_mutex_unlock(&lock);
そして一時停止するには:
pthread_mutex_lock(&lock);
play = 0;
pthread_mutex_unlock(&lock);
スレッドにUIからの「メッセージ」を定期的にポーリングさせます。言い換えると、1つのスレッドのUIは、アクションメッセージをワーカースレッドに投稿します。オーディオビデオ。