Linux操作系统实现秒表计时器

学习Linux环境高级编程中的信号处理中写的秒表计时器。

计时器是用来记录进程的运行时间的,系统会为每个进程记录三个计时器:
真实计时器:程序实际运行的时间
虚拟计时器:程序在用户态所消耗的时间
实用计时器:程序在内核态加用户态所消耗的时间之和
程序的实际运行时间=用户时间+内核时间+睡眠时间

使用计时器设置定时操作:
先设置一个时间a,表示时钟信号在a时间后发生,在设置一个时间b,表示每隔b时间来一次

int getitimer(int which, struct itimerval *curr_value);
功能:设置当前的时钟
which:计时器的类别
ITIMER_REAL/SIGALRM 真实计时器
ITIMER_VIRTUAL/SIGVTALRM 虚拟计时器
ITIMER_PROF/SIGPROF 实用计时器

int setitimer(int which, const struct itimerval *new_value,struct itimerval *old_value);
功能:设置新的时钟
which:计时器的类别
new_value:新设置的计时器
old_value:获取旧的计时器(不需要可以给NULL)

#include<stdio.h>
#include<sys/time.h>
#include<signal.h>
#include<unistd.h>

unsigned int msec = 0;

void sigalrm(int signum)
{
	printf("\r%02u:%02u:%03u",(msec/1000/60)%60,msec/1000%60,msec++%1000);
	fflush(stdout);
		
}

void sigint(int signum)
{
	printf("\r%02u:%02u:%03u\n",(msec/1000/60)%60,msec/1000%60,msec%1000);
}

int main()
{
	signal(SIGINT,sigint);
	signal(SIGALRM,sigalrm);
	struct itimerval new_value = {{0,1000},{0,1000}};
	setitimer(ITIMER_REAL,&new_value,NULL);
	while(1);
}

猜你喜欢

转载自blog.csdn.net/weixin_43857600/article/details/86132618