如何在c中实现计时器?

我们想在Linux平台下为我们的C程序添加一个计时器.

我们正在尝试发送数据包,我们想知道在1分钟内发送了多少数据包.我们希望定时器与正在执行发送数据包的while循环同时运行.例如:

    while(1)    
    {     
      send packets;    
    }

此循环将继续发送数据包,直到按下ctrl-z.应该使用计时器在60秒后停止循环.

最佳答案
你可以这样做:

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

volatile int stop=0;

void sigalrm_handler( int sig )
{
    stop = 1;
}

int main(int argc, char **argv)
{
    struct sigaction sact;
    int num_sent = 0;
    sigemptyset(&sact.sa_mask);
    sact.sa_flags = 0;
    sact.sa_handler = sigalrm_handler;
    sigaction(SIGALRM, &sact, NULL);

    alarm(60);  /* Request SIGALRM in 60 seconds */
    while (!stop) {
        send_a_packet();
        num_sent++;
    }

    printf("sent %d packets\n", num_sent);
    exit(0);
}

如果循环开销过大,您可以通过每次迭代发送N个数据包并在每次迭代时将计数递增N来分摊开销.

转载注明原文:如何在c中实现计时器? - 代码日志