gpt4 book ai didi

android - System.nanotime 给出负数

转载 作者:行者123 更新时间:2023-11-29 14:46:57 26 4
gpt4 key购买 nike

我正在编写一个使用 System.nanotime 的 android 计时器应用程序。问题是它给了我低估的结果和负数。 redVal、blueVal 和 greenVal 在相机的每一帧上更新。

结果

504455566
-95947265
9063721
61035
-99487305
-98937988
12664795
-75317382

代码

        for (testAmount = 0; testAmount < 80; testAmount++) {
runOnUiThread(new Runnable() {
public void run() {
lagSquare.setBackgroundColor(Color.rgb(255, 255, 255));
lagStartTime = System.nanoTime(); //start lagTimer start
}
});
while (redVal <= 100.0 && blueVal <= 100.0 && greenVal <= 100.0) {
x=0;
}
runOnUiThread(new Runnable() {
public void run() {
lagEndTime = System.nanoTime(); //start lagTimer end
lagSquare.setBackgroundColor(Color.rgb(000, 000, 000));//set lagSquare black
}
});
lagTimeResult = (lagEndTime - lagStartTime);
timeArray[testAmount] = lagTimeResult;
Log.i("LTR", String.valueOf(lagTimeResult));
try {
Thread.sleep(60);
} catch (InterruptedException e) {
e.printStackTrace();
}
}

最佳答案

您正在尝试输出时间差,该时间差依赖于在不同线程中设置的值,没有任何同步。这几乎总是以错误的值结束:

for (testAmount = 0; testAmount < 80; testAmount++) {

// this will schedule the Runnable to run *sometime* in
// the future - but not necessarily right now
runOnUiThread(new Runnable() {
public void run() {
lagStartTime = System.nanoTime(); //start lagTimer start
}
});

// this will also schedule this Runnable to run *sometime* in
// the future - but not necessarily after the first one
runOnUiThread(new Runnable() {
public void run() {
lagEndTime = System.nanoTime(); //start lagTimer end
}
});

// this will probably execute first (before either of
// the other Runnables have completed)
lagTimeResult = (lagEndTime - lagStartTime);
}

您不能简单地依赖线程的执行顺序,这些线程会按照您编码的顺序执行 - 绝对不是在循环中。我无法从你的问题中理解你正在尝试什么时间,但带回家的规则是,只要你有多个线程,你就可以永远依赖执行顺序而不使用某种形式的同步。

关于android - System.nanotime 给出负数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32489283/

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