当前位置: 首页 > 知识库问答 >
问题:

实现空while循环以保持控制的更好方法

东门楚
2023-03-14

我正在后台播放音频,我希望程序的控制保持静止,直到音频播放结束,因为我正在使用空while循环,如下所示

while(isPlaying==true){};
mediaPlayer.stop();

正如您所看到的,当循环保持程序控制直到音频播放,然后执行下一条指令时。这很好,但我逐渐意识到,这不是一个合适的方法来做这件事,因为我正在寻找替代品。请帮助。

共有3个答案

丁勇
2023-03-14

首先,你不需要比较你在代码中已经完成的两个布尔型字段...

while(isPlaying==true){};

你可以这样做,比如..

while(isPlaying){};

现在你已经告诉我你正在使用java,你可以试试这个...

while(isPlaying){
   Thread.sleep(1);
};
骆文彬
2023-03-14

嗯,依我拙见,最好使用另一种实现..尽量用thread,这样就不会把你的程序挂在那里(毕竟是背景音频;播放音频时,您可能想做些别的事情)..

尝试查看此页面…

仲孙兴旺
2023-03-14

假设你的程序是用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();

有关更多示例,请参阅有关受保护块的官方教程。

您也可以让< code>mediaPlayer在结束时调用某个回调函数,例如,在开始播放时禁用GUI组件,在结束回调函数被调用时重新启用它们(您也可以在这里使用事件侦听器方法)。

在没有更多信息的情况下,我推荐后者,因为它不会阻止你在玩家玩游戏时做其他不相关的事情(或者让你的程序根本没有反应),但前者可能更适合于你的情况。

如果是 C 或 C,则概念是相同的。使用第一个选项的条件变量/事件的任何等效项,或第二个选项的回调/侦听器/信号槽的任何等效项。

 类似资料:
  • while 关键字可以用作当型循环(当条件满足时循环)。 让我们用 while 循环写一个不怎么出名的 FizzBuzz 程序。 fn main() { // 计数器变量 let mut n = 1; // 当 `n` 小于 101 时进入循环操作 while n < 101 { if n % 15 == 0 { printl

  • 问题内容: 我正在制作一个以这种方式执行的while循环程序: 主线程进入while循环。 在while循环中什么也没有发生。 线程将停留在while循环中,直到满足条件为止。 另一个线程运行一个满足上述条件的函数。 这是一个例子: 类中还有另一个函数会将路径设置为null,一旦发生这种情况,主线程应退出此循环。在另一个线程中调用另一个函数。 但是,即使将path设置为null,主线程也不会退出循

  • 我正在编写一个 Java 程序。它应该打印出年终账户余额,今年投资,年度回报和年度数量。前任: 第一年-投资10000美元,投资额为10%,最终投资额为11000美元第二年-在现有11000美元的基础上再投资10000美元,现在你有21000美元,年回报率为2100美元,最终投资额为23100美元,持续投资6年。 我的代码打印了所有6年,但与第一年的值相同。循环有什么问题吗?非常感谢。这里我的代码

  • 我的代码: 一切正常,但我不能让循环在任何地方工作。

  • 问题内容: 使用SQL 2012并将XML传递到存储过程中,该过程必须接受该输入,并为传递到该存储过程的XML部分中的每个项目在表中写一行。XML看起来像: 存储过程的输出应该是将5行插入到一个表中(上面每个插入一行),并且在该表的和字段中每个字段具有相同的值。 我可以得到的数量并可以获取XML,但是我不知道如何遍历它来进行插入。 我可以使用以下SQL来获取XML中的内容。 目前,我正在使用变量和

  • 本文向大家介绍C#中for循环、while循环循环执行的方法,包括了C#中for循环、while循环循环执行的方法的使用技巧和注意事项,需要的朋友参考一下 先给大家介绍下C#中的循环执行for循环 在这一节练习中,我们向大家介绍一下C#中的另一种重要的循环语句,for循环。 表达式1:一般为赋值表达式,给控制变量赋初值; 表达式2:逻辑表达式,循环控制条件;当条件为真时,循环执行循环体中的语句。