修正libltc的sleep函数
Correct sleep function of libltc
我正在使用 libLTC 来生成时间码。我在下面有一个粗略的工作示例:
#include <curses.h>
#include <time.h>
#include <ltc.h>
int main() {
initscr();
nodelay(stdscr, TRUE);
LTCFrame frame;
LTCFrameExt Frame;
SMPTETimecode stime;
do {
clear();
ltc_frame_increment(&frame, 25, LTC_TV_625_50, LTC_USE_DATE);
ltc_frame_to_time(&stime, &frame, LTC_USE_DATE);
printw("%02d:%02d:%02d%c%02d | %8lld %8lld%s\n",
stime.hours,
stime.mins,
stime.secs,
(Frame.ltc.dfbit) ? '.' : ':',
stime.frame,
Frame.off_start,
Frame.off_end,
Frame.reverse ? " R" : ""
);
refresh();
} while (getch() != 'q');
endwin();
return 0;
}
我目前遇到的问题是循环运行得太快,因此 TC 也是如此,我想知道减慢速度以使其以正确的速度运行的正确方法是什么?有 sleep() 函数,但需要针对每个帧速率进行更改吗?
有很多方法可以解决这个问题。最简单的方法是 nanosleep()
函数,因此您可以计算在 do
循环底部执行下一次迭代要等待多少纳秒。
一种更复杂的方法是使用 settimer()
函数来使用 RTC 在适当的时间引发 SIGALRM。因为这将通过信号处理来完成,所以根本不需要 do/while
循环。
我正在使用 libLTC 来生成时间码。我在下面有一个粗略的工作示例:
#include <curses.h>
#include <time.h>
#include <ltc.h>
int main() {
initscr();
nodelay(stdscr, TRUE);
LTCFrame frame;
LTCFrameExt Frame;
SMPTETimecode stime;
do {
clear();
ltc_frame_increment(&frame, 25, LTC_TV_625_50, LTC_USE_DATE);
ltc_frame_to_time(&stime, &frame, LTC_USE_DATE);
printw("%02d:%02d:%02d%c%02d | %8lld %8lld%s\n",
stime.hours,
stime.mins,
stime.secs,
(Frame.ltc.dfbit) ? '.' : ':',
stime.frame,
Frame.off_start,
Frame.off_end,
Frame.reverse ? " R" : ""
);
refresh();
} while (getch() != 'q');
endwin();
return 0;
}
我目前遇到的问题是循环运行得太快,因此 TC 也是如此,我想知道减慢速度以使其以正确的速度运行的正确方法是什么?有 sleep() 函数,但需要针对每个帧速率进行更改吗?
有很多方法可以解决这个问题。最简单的方法是 nanosleep()
函数,因此您可以计算在 do
循环底部执行下一次迭代要等待多少纳秒。
一种更复杂的方法是使用 settimer()
函数来使用 RTC 在适当的时间引发 SIGALRM。因为这将通过信号处理来完成,所以根本不需要 do/while
循环。