一个Linux下的计时器

程序代码

#include <signal.h>
#include <stdio.h>
#include <unistd.h>

bool x = true;

void CtrlC(int sig)
{
    x = false;
    printf("\t Ctrl+C Received!\n");
}

int main()
{
    printf("Program Activate!\n");

    (void) signal(SIGINT, CtrlC);
    
    int counter = 0;
    while(x)
    {
        printf("Counter: %d Hour(s) %d Minute(s) %d Second(s)\n",
            counter/60/60, counter/60%60, counter%60);
        counter++;
        sleep(1);
    }

    printf("Good Bye!\n");
}

运行结果

233932_EWs3_1425762.png

END

转载于:https://my.oschina.net/Tsybius2014/blog/287670

在C语言中,可以使用`setitimer`函数来创建一个Linux计时器。`setitimer`函数允许你设置一个定时器,当定时器到期时,会触发一个信号。以下是一个简单的示例代码,展示了如何使用`setitimer`创建一个每秒触发一次的计时器: ```c #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <signal.h> #include <sys/time.h> volatile sig_atomic_t timer_expired = 0; void timer_handler(int signum) { timer_expired = 1; } int main() { struct sigaction sa; struct itimerval timer; // 设置信号处理器 sa.sa_handler = &timer_handler; sa.sa_flags = SA_RESTART; sigemptyset(&sa.sa_mask); if (sigaction(SIGALRM, &sa, NULL) == -1) { perror("sigaction"); exit(EXIT_FAILURE); } // 设置定时器 timer.it_value.tv_sec = 1; timer.it_value.tv_usec = 0; timer.it_interval.tv_sec = 1; timer.it_interval.tv_usec = 0; if (setitimer(ITIMER_REAL, &timer, NULL) == -1) { perror("setitimer"); exit(EXIT_FAILURE); } // 主循环 while (1) { if (timer_expired) { printf("Timer expired!\n"); timer_expired = 0; } // 可以在这里添加其他代码 } return 0; } ``` 这个程序的工作原理如下: 1. 定义一个全局变量`timer_expired`来标记计时器是否到期。 2. 定义一个信号处理器`timer_handler`,当计时器到期时,该处理器会被调用,并将`timer_expired`设置为1。 3. 使用`sigaction`函数设置信号处理器。 4. 使用`setitimer`函数设置定时器,这里设置了一个每秒触发一次的计时器。 5. 在主循环中,检查`timer_expired`变量,如果计时器到期,则打印消息并将`timer_expired`重置为0。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值