linux下C语言有没有定时调用的函数

linux下C语言有没有定时调用的函数,第1张

你是指延迟函数还是定时调用,比如到11:12:13秒执行某个函数?

如果是延时函数用

usleep(usec) // 微妙

sleep(sec)    // 秒

如果是定时执行的话,你只能开个线程或while,每隔1s判断下当前系统时间,

struct   tm     *ptm 

long       ts 

int         y,m,d,h,n,s 

ts   =   time(NULL) 

ptm   =   localtime(&ts) 

y   =   ptm-> tm_year+1900     //年 

m   =   ptm-> tm_mon+1             //月 

d   =   ptm-> tm_mday               //日 

h   =   ptm-> tm_hour               //时 

n   =   ptm-> tm_min                 //分 

s   =   ptm-> tm_sec                 //秒

照着上面的格式组成字符串进行判断,到点了就执行就可以了

这段代码是Linux的一个内核模块程序,timer_list也是Linux内核中的数据结构。模块程序不是以main函数作为入口的。而是以module_init指定。

module_init/module_exit分别用于指定模块的加载和卸载函数。

加载模块(insmod)时,会调用mytimer_init函数。这个函数设置一个定时器,在定时器超时时执行myfunc函数,指定函数参数为“Hello,world!”。

myfunc执行时,会输出“Hello,world!”,mod_timer函数会将定时器重新计时,两秒后到期。

因此整个代码执行起来后的现象就是每两秒输出一次Hello,world!

楼主的程序没有用 signal 注册 SIGPROC 对应函数,在 for 循环的时候可能已经发生了多次中断和重置计时器。至于比1秒大,手册中有解释 Timers will never expire before the requested time, but may expire some (short)  time  afterward,  which depends on the system timer resolution and on the system loadsee time(7).

要在1秒间隔调用一个函数,需要加上 signal,比如

#include <signal.h>

#include <sys/time.h>

#include <stdio.h>

#include <time.h>

static struct itimerval a

void timeover( int event )

{

    struct itimerval b

    printf( "timeover at %ld\n", time(NULL) )

    getitimer( ITIMER_PROF, &b )

    printf( "sec = %ld, usec = %ld\n", b.it_value.tv_sec, b.it_value.tv_usec )

}

int main()

{

    signal( SIGPROF, timeover )

    printf( "begin at %ld\n", time(NULL) )

    a.it_interval.tv_sec = 1

    a.it_interval.tv_usec = 0

    a.it_value.tv_sec = 1

    a.it_value.tv_usec = 0

    setitimer( ITIMER_PROF, &a, NULL )

    while(1)

    return 0

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8509386.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-17
下一篇2023-04-17

发表评论

登录后才能评论

评论列表(0条)

    保存