我需要在线程函数中创建一个准确的延迟(大约 100us)。我尝试使用 nanosleep 功能,但不够准确。我读了一些关于如何读取硬件 1MHz 定时器的文章,所以在我的函数中为了创建一个 100us 延迟 y 尝试了这样的事情:
prev = *timer;
do {
t = *timer;
} while ((t - prev) < 100);
但是,该程序似乎停留在循环内。但是,如果我在循环中插入一个小的 nano sleep 它可以工作(但会失去精度):
sleeper.tv_sec = 0;
sleeper.tv_nsec = (long)(1);
prev = *timer;
do {
nanosleep (&sleeper, &dummy);
t = *timer;
} while ((t - prev) < 500);
我在一个独立的程序中尝试了第一个版本,它可以工作,但是在我的主程序中,这是在一个线程内它没有。
有谁知道第一个版本(没有小的 nanosleep)不起作用?