0

GUIがフリーズするため、マルチスレッドを介してバックグラウンドで音楽を再生するプログラムに取り組んでいます。私はマルチスレッド(揮発性、同期など)の基本的な知識を持っていますが、(プロセスが処理している場合でも)スレッドをすぐに停止/一時停止する方法を考えていました。バックグラウンドで音楽がループしていますが、停止変数をループにフックすると、音楽を停止するために曲の再生を停止する必要があります。だから私の質問は残っています、親スレッドから、曲の途中で音楽をすぐに一時停止または終了する方法はありますか?それの後に再生するオーディオがあるからです。

4

1 に答える 1

1

まず、スレッド内のほとんどのループは次のようになります。

while(!isInterrupted()) {
    try {
       // do something (like play song)
    } catch (InterruptedException e) {
        interrupt();
    }
}

ループ内にブロッキング呼び出しがある場合(これはあなたの説明からのように聞こえます)、interrupt()を許可する可能性があります。スレッドの外部からinterrupt()を呼び出すと、ブロッキング呼び出しが中断され、catchブロックにダンプされます。これにより、「割り込み」フラグがクリアされるため、ループから抜け出すには、割り込みを再度呼び出す必要があります。

音楽の再生方法に応じて:

  • 「一時停止」または「停止」方式のライブラリを使用して音楽を再生している場合は、それを使用できます。jFugueを使用しているようです-そのプレーヤーにはpause()メソッドがあります-それを呼び出してみましたか?
  • 他のことをしている場合は、曲の位置を追跡し、スレッドでinterrupt()を呼び出す必要があります。再起動する場合は、追跡された位置に戻る必要があります

上記のループで再開する場合は、次のようなネストされたループが必要になることに注意してください。

while(true) {
    while(!isInterrupted()) {
        ...
    }
}

!isInterrupted()ループしかない場合、スレッドは終了し、再開できません。

お役に立てれば!

于 2012-12-21T04:20:14.170 に答える