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 波動範圍較大,無法保證精確的延時。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章