Linux 时间

一. usleep 是否精确

    ioctl 和 netlink 两种通信方式,最大的区别在于后者的实时通知机制(软中断实现)。但如果 usleep 足够精确,前者也能做到准实时。但是测试结果不理想。

for (i = 0; i < 10000; i++) {
    gettimeofday(&timeval1, NULL);
    usleep(1);
    gettimeofday(&timeval2, NULL);

    if (timeval1.tv_sec == timeval2.tv_sec) {
        dbg_cputickes = (int)(timeval2.tv_usec - timeval1.tv_usec);
    }

    if (dbg_cputickes > max) {
        max = dbg_cputickes;
    }

    if (dbg_cputickes < min) {
        min = dbg_cputickes;
    }

    运行多次,min 的范围在 3-4,max 在 60-70。(gettimeofday() 本身的耗时在 1us 左右)

    结论:usleep 波动范围较大,无法保证精确的延时。

你可能感兴趣的:(usleep)