【发布时间】:2019-10-17 10:23:08
【问题描述】:
我编写了一个小程序来启动和录制摄像机的立体设置。我想记录一个 100 毫秒的序列。问题是:我不知道如何以尽可能高的精度为函数计时。我找到了标题<unistd.h>,其中包括函数usleep,它可以将执行暂停指定的微秒间隔。所以在我的程序中,我正在做这样的事情:
left_camera.start_recording();
right_camera.start_recording();
usleep(100000);
left_camera.stop_recording();
right_camera.stop_recording();
有没有更好的方法来确保两个函数之间的精确计时?
【问题讨论】:
-
没有单一的推荐方式。根据您拥有的 unix 版本(linux 与 BSD 与 .... ,内核版本等),有不同的方法可以实现效果。选择也可能受到硬件能力的影响(例如,是否有高精度硬件定时器)。您需要阅读特定系统的文档。
-
不幸的是,这并不能确保您的睡眠时间不少于 100 毫秒。来自
man usleep:“系统活动可能会将睡眠时间延长一个不确定的量。”放弃“尽可能高的精度”的想法,决定你真正需要的精度。然后您就可以开始寻找解决方案了。 -
有一些方法可以获得纳秒甚至皮秒的精度,但并非没有投入大量精力(和专用硬件)。 “尽可能高的精度”太不精确了。您真正需要什么精度?
-
您需要睡眠,还是需要 100 毫秒的延迟?忙等待是一种选择吗?
-
@divinas 我只需要延迟。我希望摄像机录制 100 毫秒。 “忙于等待”是什么意思?可能是一种选择。