0

我正在使用 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() 功能,但需要针对每个帧速率进行更改?

4

1 回答 1

1

有很多方法可以解决这个问题。最简单的方法是nanosleep()函数,因此您可以计算要等待多少纳秒才能在do循环底部执行下一次迭代。

更复杂的方法是使用该settimer()函数在适当的时间使用 RTC 来提高 SIGALRM。因为这将通过信号处理来完成,所以根本不需要do/while循环。

于 2021-04-19T19:19:08.240 回答