c - C 中的数字时钟程序 - 使用中断?

标签 c linux interrupt clock

我正在为计算机集群编写一个监控程序,它可以在 LCD 屏幕上显示大量数据。作为显示的一部分,我想要一个显示当前日期、小时、分钟和秒的数字时钟。问题是,我有一堆任务在一个大循环中进行(ping 请求、A/D 转换、文件扫描),我只是没有时间在循环中更新时钟。

我在 Linux (Debian) 下使用 C。

关于我应该如何解决这个问题有什么建议吗?我在想也许可以使用中断来每秒更新一次时钟,但是在 Linux 下如何做到这一点呢?我以前只真正使用过微 Controller 的中断。

最佳答案

您需要运行一些并行代码来执行此操作。对于这个应用程序,我能想到的最好的方法是使用线程,使用 pthread_create() 和这样的函数:

void * clock_routine(void * args) {
    while(1) {
        // update clock
    }
}

在你的 main 函数中类似地调用它:

pthread_t clock_tid; // Clock thread handle
int rc = pthread_create(&clock_tid, NULL, clock_routine, NULL);

并使用-lpthread 标志编译文件。

clock_routine 中的代码将与您的其他代码并行运行,并且由于它只是一个时钟,因此您无需处理任何依赖/同步问题。

P.S.:(有点没用,但这里是:)我不确定,但是在你的 while(1) 循环中使用 sleep 函数, sleep 几微秒,“可能”改进您的程序,因为您不需要“实时”时钟更新,而只需要几微秒的精度。像这样不断更新时钟,“可能”被认为是忙等待。如果有人对此有更多了解,请纠正我。

关于c - C 中的数字时钟程序 - 使用中断?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24497286/

相关文章:

c - 读取文件时内存分配问题

java - Glib内存分配错误

c - 为什么指向 int 数组的未初始化指针可以赋给变量值?

c - opencv for c gtk 警告无法打开显示

linux - 限制 proftpd 用户的访问

embedded - 为什么 INT0 的向量数是 1 而不是 datasheet 中的 2?

linux - 是否可以在 linux 机器上使用 visual studio 2010 c++ 代码?

linux - Valgrind 不会检测到明显的错误

linux - 如何解释 smp_affinity 输出

c - 如何将数据从中断处理程序传输到用户应用程序?