高速で流れてくるワークだとかをカメラで判定するが、その時の時刻を可能な限り正確に……としたい人情はわかる。
わかるけど、Linuxの構造上そういう調整は根性据えてやらんといけない。
実際のところ
試しにカーネル他に全く細工をしていないUbuntu20LTS on WSLな環境でsleepの時刻を測ってみる。
shuzo@DESKTOP-4QNOKCC:~$ time sleep 1 real 0m1.018s user 0m0.000s sys 0m0.000s shuzo@DESKTOP-4QNOKCC:~$ time sleep 0.1 real 0m0.117s user 0m0.000s sys 0m0.016s shuzo@DESKTOP-4QNOKCC:~$ time sleep 0.1 real 0m0.117s user 0m0.000s sys 0m0.000s shuzo@DESKTOP-4QNOKCC:~$ time sleep 0.1 real 0m0.117s user 0m0.000s sys 0m0.000s shuzo@DESKTOP-4QNOKCC:~$ time sleep 0.01 real 0m0.028s user 0m0.000s sys 0m0.000s shuzo@DESKTOP-4QNOKCC:~$ time sleep 0.001 real 0m0.020s user 0m0.000s sys 0m0.000s shuzo@DESKTOP-4QNOKCC:~$ time sleep 0.02 real 0m0.037s user 0m0.000s sys 0m0.000s shuzo@DESKTOP-4QNOKCC:~$ time sleep 0.01 real 0m0.027s user 0m0.000s sys 0m0.000s
御覧のように、下二桁未満はあてにならない。
0.02秒はズレるらしい。
まぁ、そういうリアル処理が必要なら外部クロックに頼るなり、FPGAなりでやった方がいい気がする。