gpt4 book ai didi

java - 空循环可以使用吗?

转载 作者:行者123 更新时间:2023-12-02 05:40:13 25 4
gpt4 key购买 nike

我正在开发一个基于文本的游戏,使用 GUI 作为输入和输出的“控制台”。我的目标是,当游戏要求时,将我在 JTextArea 中输入的命令提交给另一个方法。

为此,我提出了这个想法:当调用 user.readLine() 时,它会循环直到 GUI 收到操作事件。该事件的检测是通过翻转一个名为commanded 的 boolean 值来完成的,该 boolean 值在actionevent 的方法中进行切换。 readLine() 然后在此时中断循环并返回刚刚输入的文本,然后将 boolean 值翻转回来。有趣的是,只有当我在翻转 boolean 值之前添加 System.out.println();Thread.sleep(1); 时,这才有效...

readLine() 方法在等待操作事件时涉及大量循环,大括号之间没有任何代码。认为这是“短路”并且需要避免的事情是错误的吗?代码如下。谢谢!

CommandInput.java:

public void waitForCommand() {
try {
processCommand(Parasite.user.readLine().toLowerCase());
} catch (Exception e) {
System.err.println(e);
}
}

UI.java(初始化为 Parasite.user):

boolean commanded= false;
String command = "";

public final String readLine()
{
while(commanded == false)
{
System.err.print(command);
}
System.out.println("Submitting Command");
commanded = false;
return command;
}

private void jTextField1ActionPerformed(java.awt.event.ActionEvent evt) {

commanded=true;
command=jTextField1.getText();
System.err.println(jTextField1.getText());
jTextField1.setText("");

}

最佳答案

短路的事情:除了这样的循环之外,循环没有做太多的事情:

while(true) {}

对 CPU 不太友好,最好是这样的:

while(true) {
Thread.yield();
}

这表示 CPU,该线程现在可以停止,因此其他线程现在可以运行,它在线程队列中向下移动。这样做不会失去太多的精度,但它会阻止你使用所有的 CPU。 (查看此处了解更多信息:http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#yield())

所以在你的情况下:

while(commanded == false)
{
System.err.print(command);
Thread.yield();
}

关于java - 空循环可以使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24581548/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com