我正在播放背景音频,我希望程序的控制能够保持静止,直到音频播放结束,因为我使用空循环,如下所示
while(isPlaying==true){};
mediaPlayer.stop();
正如您所看到的,while循环保持程序控制直到播放音频,然后执行下一条指令。这工作正常,但我发现这不是一个正确的方法来做空 - 虽然昂贵,我正在寻找替代方案。请帮忙。
答案 0 :(得分:3)
假设你的程序是Java(...为什么你给它三个语言标签?)你有几个选择。您可以使用适当的同步事件,例如:
// fields
Object playerStopEvent = new Object();
boolean isPlaying;
// in your media player, when playback is complete:
synchronized (playerStopEvent) {
isPlaying = false;
playerStopEvent.notifyAll();
}
// elsewhere, when waiting for playback to complete:
synchronized (playerStopEvent) {
while (isPlaying) {
try {
playerStopEvent.wait();
} catch (InterruptedException x) {
// abort or ignore, up to you
}
}
}
mediaPlayer.stop();
有关更多示例,请参阅Guarded Blocks上的官方教程。
你也可以让mediaPlayer
在完成时调用一些回调,例如在开始播放时禁用GUI组件,并在调用完成的回调时重新启用它们(您也可以在此处使用事件监听器方法)。
如果没有更多信息,我推荐后者,因为它不会阻止你在播放器播放时做其他无关的事情(或者让你的程序完全不响应),但前者可能更合适,具体取决于你的情况。
如果是C或C ++,那么概念就是一样的。使用你拥有的第一个选项的条件变量/事件的等价物,或者你对第二个选项的任何等效的回调/听众/信号+插槽。
答案 1 :(得分:2)
尝试检查this page ..
答案 2 :(得分:1)
您可以考虑sleep(time in milliseconds )
。这将允许你的线程执行while循环睡眠指定的毫秒,然后再次检查条件。
while(isPlaying==true)
{
Thread.currentThread().sleep(1000); // sleep for 1 sec
};
这一次很快,但更好的方法是使用@JasonC在他的回答中建议的wait()
和notify()
机制。
答案 3 :(得分:1)
首先,您不必比较您在代码中完成的2个布尔字段...
while(isPlaying==true){};
你可以这样做..
while(isPlaying){};
并且,既然你已经告诉过你正在使用java,你可以试试这个......
while(isPlaying){
Thread.sleep(1);
};
答案 4 :(得分:0)
简单的方法是将sleep(1)置于其中。并且cpu的使用不会花费更多。
答案 5 :(得分:0)
你真的不需要空{}
中的while loop
。
while(isPlaying);
就足够了。
另外,正如其他人已经建议的那样,考虑在循环中使用延迟,即
的Thread.sleep(100); //在Java中睡眠1/10秒
或者
延迟(100); //在Java中使用1/10秒的lephs