当前位置: 技术问答>linux和unix
求定时器!
来源: 互联网 发布时间:2015-06-01
本文导语: 有没有用过定时器的(alarm()或者setitimer(),最好是后者)同仁,给个例子,并恳请留下qq号或msn,讨论、学习 | int main(int argc, char* argv[]) { signal( ALRM, timeout) alarm(3); { ...
有没有用过定时器的(alarm()或者setitimer(),最好是后者)同仁,给个例子,并恳请留下qq号或msn,讨论、学习
|
int main(int argc, char* argv[])
{
signal( ALRM, timeout)
alarm(3);
{
struct itimerval new;
new.it_interval.tv_sec = 3;
new.it_interval.tv_usec = 0;
new.it_value = new.it_interval;
setitime( ITIMER_REAL , &new, NULL )
}
pause();
}
void timeout()
{
printf("timeout .... ");
}
{
signal( ALRM, timeout)
alarm(3);
{
struct itimerval new;
new.it_interval.tv_sec = 3;
new.it_interval.tv_usec = 0;
new.it_value = new.it_interval;
setitime( ITIMER_REAL , &new, NULL )
}
pause();
}
void timeout()
{
printf("timeout .... ");
}
|
void Timer(int sec, long usec)
{
struct timeval tvSelect;
tvSelect.tv_sec = sec;
tvSelect.tv_usec = usec;
select(FD_SETSIZE, NULL, NULL, NULL, &tvSelect);
};
int main()
{
printf("--- begin ---n");
Timer(3, 1000*500);
printf("--- bye ---n");
}
{
struct timeval tvSelect;
tvSelect.tv_sec = sec;
tvSelect.tv_usec = usec;
select(FD_SETSIZE, NULL, NULL, NULL, &tvSelect);
};
int main()
{
printf("--- begin ---n");
Timer(3, 1000*500);
printf("--- bye ---n");
}
|
会。看APUE里信号处理部分。
|
sleep()
usleep()
usleep()
|
长知识了
|
还不够,再提示一点:
select 实现的定时器,sleep系列实现的定时器,都可能被其它信号打断。所以可能达不到需要的定时要求。看看select最后一个参数在返回后的值。再研究研究sleep系列的返回值。
select 实现的定时器,sleep系列实现的定时器,都可能被其它信号打断。所以可能达不到需要的定时要求。看看select最后一个参数在返回后的值。再研究研究sleep系列的返回值。
|
又从大家那里学到了不少知识:
以前只知道alarm()、timer_create(),也知道select()的用法,但没有想到把select()用作定时器-----感谢“小石头”;
但paopaoer兄弟的信号处理函数的定义就有问题,至少得用个地址符号吧(&);
alarm()实现的定时器很简单,到了时间会向调用进程发送SIGALRM信号,所以可以定义信号的处理函数来在时间到达时做一些事情;但是如果定义了多个alarm定时器,那么就会有多个SIGAL*信号发送到调用进程,会引起紊乱;所以alarm()适合于简单的应用;
当要用到多个需要定时器的应用,就需要用timer了,它的参数可以指定当时间到达是向调用进程提交的动作(发信号、直接去触发代理等);
可惜我这里没有程序,等有了就发给你。
以前只知道alarm()、timer_create(),也知道select()的用法,但没有想到把select()用作定时器-----感谢“小石头”;
但paopaoer兄弟的信号处理函数的定义就有问题,至少得用个地址符号吧(&);
alarm()实现的定时器很简单,到了时间会向调用进程发送SIGALRM信号,所以可以定义信号的处理函数来在时间到达时做一些事情;但是如果定义了多个alarm定时器,那么就会有多个SIGAL*信号发送到调用进程,会引起紊乱;所以alarm()适合于简单的应用;
当要用到多个需要定时器的应用,就需要用timer了,它的参数可以指定当时间到达是向调用进程提交的动作(发信号、直接去触发代理等);
可惜我这里没有程序,等有了就发给你。
|
定时器和延时是两个不同的东西。延时可以用nanosleep,不会影响信号。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。