我试图在将来的特定时间将命令发送到BTRelay,准确度为纳秒。我需要多次发送命令,延迟精度为纳秒。因此,为了延迟,我使用带有While循环的SystemClock.elapsedRealtimeNanos()。我的代码延迟500毫秒 -
// store the time after 500ms
long testElapsedTime = SystemClock.elapsedRealtimeNanos() + (500 * 1000000l);
// loop for delay
while(testElapsedTime - SystemClock.elapsedRealtimeNanos() >= 0l)
{
}
为了测试上述逻辑,我用它进行测试。我的测试代码是 -
// Log 1
Log.d( "Test the our delay logic start loop" , "Test the our delay logic start loop");
for(int i = 1 ; i <= 10 ; i++)
{
// Log 2
Log.d( "Test the our delay logic Start"+ i , "Test the our delay logic Start 500 " + i);
testElapsedTime = SystemClock.elapsedRealtimeNanos() + (500 * 1000000l);
// Loop for delay
while(testElapsedTime - SystemClock.elapsedRealtimeNanos() >= 0l)
{
}
// Log 3
Log.d( "Test the our delay logic End"+ i , "Test the our delay logic 600 End" + i);
}
// Log 4
Log.d( "Test the our delay logic end loop" , "Test the our delay logic end loop" );
我在测试代码上运行3次。当我看到Log 2和3的时间差时,大部分时间是500ms但是有些时间它增加了几毫秒.3轮的差异为
第1轮:( Log 2和3的时差)
第2轮:
第3轮:
请告诉我如何实现纳秒级延迟精度。 提前谢谢。