【发布时间】:2015-05-13 09:59:45
【问题描述】:
我正在使用这样的睡眠来每 1/25 秒抓取一帧。操作系统是 Debian 6 armel。
#define VIDEO_FRAME_RATE 25.0f
while (RECORDING) {
sprintf(buffer, "Someting from a data struct that is updated\n");
fprintf(Output, buffer);
usecTosleep = (1.0f/VIDEO_FRAME_RATE) * 1000000;
usleep(usecToSleep);
}
问题:循环每 1/25 秒将缓冲区输出到输出文件描述符的保证是什么?
有没有更好的方法在 C 中做到这一点?我需要它尽可能精确以防止漂移。
谢谢。
【问题讨论】:
-
也许我没有正确理解这一点,但你不能只做 sleep(.04) 吗?
-
您还应该知道,您的代码不会真正每 0.04 秒 准确 进行一次循环。诸如
sprintf、printf之类的事情以及您对数据执行的任何其他操作都需要时间。 -
Windows/Linux/您使用的任何桌面操作系统都不是 RTOS。因此,无法保证任何时间。
-
@abuv 如果他使用 usecTosleep,他总是可以通过更改 const 来获得正确的帧速率
-
你很可能会遇到这个问题(跳帧等)。您可能需要一个对某些硬件事件(hysnc 或 vsync 或其他)做出反应的驱动程序。