修正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 循环。