gpt4 book ai didi

java - 这样做有效吗? (c、c++、java)

转载 作者:行者123 更新时间:2023-11-30 18:31:21 25 4
gpt4 key购买 nike

void loop()
{
if (button || tilt)
{
do
{
while (ss.available()>0)
{
char c = byte(ss.read());
if (gps.encode(c))
{
if (gps.location.isValid()) //I want this to run until this function is true
{
Serial.print(gps.location.lat(), 6);
Serial.print(gps.location.lng(), 6);
}
}
}
} while (gps.location.isValid());
}
}

上面的代码来自arduino,但我在这里发布是因为这不是关于arduino的问题,而是关于C风格语言编程的问题。

我想成功到达 Serial.print() 部分。我放置了一个 do while 循环来确保它连续运行。

现在,我的问题是,这有效吗?我的意图是运行直到 gps.location.isValid() 返回 true 。但是 gps.location.isValid() 是在 do while 循环内计算的,我也将它作为 do while 循环的条件。

我的意思是, while (gps.location.isValid());会尝试重新计算这个函数,或者如果循环中的函数返回true,那么该值将被“记住”,因此我将退出循环?

或者即使它在循环内成功返回 true, while (gps.location.isValid());会尝试重新运行这个函数,或者它会记住它之前传递过它?

我的目标是当 gps.location.isValid() 返回 true 时,执行以下命令并退出。不要尝试计算并运行两次(一次在循环内,一次在条件中)。

因为在我的程序中,它永远不会传递两次,因此它将永远运行。我想传递一次,执行这两条语句并结束。

最佳答案

以下是一种方法:

void loop()
{
if (button || tilt)
{
bool isGpsLocationValid = false;
while (!isGpsLocationValid)
{
while(ss.available()<=0)
{
Thread.sleep(1000); // wait for 1 sec
}
char c = byte(ss.read());
if (gps.encode(c))
{
if (gps.location.isValid())
{
Serial.print(gps.location.lat(), 6);
Serial.print(gps.location.lng(), 6);

isGpsLocationValid = true;
}
}
}

}
}

更新:

内部 while 循环中的 sleep 等待至少一秒(可配置)。如果您想确定等待时间,那么您可能需要检查该语言库中的自旋锁实现,或其他一些机制。

在您发布的代码中,外部 do-while 循环末尾的 gps.location.isValid() 将会被计算,即使已经在内循环内部计算过。

关于java - 这样做有效吗? (c、c++、java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24173016/

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