当前位置: 技术问答>linux和unix
菜鸟求助关于定时器的问题
来源: 互联网 发布时间:2015-10-20
本文导语: 由于初次接触LINUX,有许多不明之处。情况如下: 我要实现几个间隔定时器,当时间间隔时我都会用消息队列把间隔到的消息发给其他的进程来通知间隔到。 一个进程有多个间隔定时器该怎么实现啊? 当一个进程有...
由于初次接触LINUX,有许多不明之处。情况如下:
我要实现几个间隔定时器,当时间间隔时我都会用消息队列把间隔到的消息发给其他的进程来通知间隔到。
一个进程有多个间隔定时器该怎么实现啊?
当一个进程有多个定时器时是不是用setitimer和sigaction就不行了呀?
请问哪位大侠有高招啊? 在网上找了好久都没有找到
在些谢谢各位了呀!
我要实现几个间隔定时器,当时间间隔时我都会用消息队列把间隔到的消息发给其他的进程来通知间隔到。
一个进程有多个间隔定时器该怎么实现啊?
当一个进程有多个定时器时是不是用setitimer和sigaction就不行了呀?
请问哪位大侠有高招啊? 在网上找了好久都没有找到
在些谢谢各位了呀!
|
给个例子:
// *********************************************************************
// Function : TimeCount()
// Description : When timer arrived and accept the signal,time count will
// add itself.
// Arguments : integer signal number.
// Return : none
// Side Effect :
// *********************************************************************
static void TimeCount(int signo)
{
++DelayCount;
++RecvDLECount;
}
// *********************************************************************
// Function : TimeStart()
// Description : Timer start to counting time.When time arrived,it will
// call signal function.
// Arguments : integer sec and integer usec for start time;integer
// i_sec and integer i_usec for interval time.
// Return : none
// Side Effect :
// *********************************************************************
void TimeStart(int sec,int usec,int i_sec,int i_usec)
{
struct sigaction TimeSignal;
struct itimerval ivalue,ovalue;
TimeSignal.sa_handler = TimeCount;
sigemptyset(&TimeSignal.sa_mask);
TimeSignal.sa_flags = 0;
sigaction(SIGALRM,&TimeSignal,NULL);
ivalue.it_interval.tv_sec = sec;
ivalue.it_interval.tv_usec = usec;
ivalue.it_value.tv_sec = i_sec;
ivalue.it_value.tv_usec = i_usec;
setitimer(ITIMER_REAL,&ivalue,&ovalue);
}
判断DelayCount、RecvDLECount的值可以实现定时功能。
以前项目中用到的函数,参考一下吧。
// *********************************************************************
// Function : TimeCount()
// Description : When timer arrived and accept the signal,time count will
// add itself.
// Arguments : integer signal number.
// Return : none
// Side Effect :
// *********************************************************************
static void TimeCount(int signo)
{
++DelayCount;
++RecvDLECount;
}
// *********************************************************************
// Function : TimeStart()
// Description : Timer start to counting time.When time arrived,it will
// call signal function.
// Arguments : integer sec and integer usec for start time;integer
// i_sec and integer i_usec for interval time.
// Return : none
// Side Effect :
// *********************************************************************
void TimeStart(int sec,int usec,int i_sec,int i_usec)
{
struct sigaction TimeSignal;
struct itimerval ivalue,ovalue;
TimeSignal.sa_handler = TimeCount;
sigemptyset(&TimeSignal.sa_mask);
TimeSignal.sa_flags = 0;
sigaction(SIGALRM,&TimeSignal,NULL);
ivalue.it_interval.tv_sec = sec;
ivalue.it_interval.tv_usec = usec;
ivalue.it_value.tv_sec = i_sec;
ivalue.it_value.tv_usec = i_usec;
setitimer(ITIMER_REAL,&ivalue,&ovalue);
}
判断DelayCount、RecvDLECount的值可以实现定时功能。
以前项目中用到的函数,参考一下吧。
|
UP