当前位置:  技术问答>linux和unix

setitimer中 ITIMER_VIRTUAL 和 ITIMER_PROF的区别

    来源: 互联网  发布时间:2016-08-31

    本文导语:  如题,我有10个进程,每个进程要设置定时器, 定时器i,然后进行系统调用 gethostbyname()这个系统函数,我的疑问是,我的定时器设置超时2秒该怎么设置,我的意图是:在调用gethostbyname()这个函数时,如果超过两秒 ...

如题,我有10个进程,每个进程要设置定时器,
定时器i,然后进行系统调用 gethostbyname()这个系统函数,我的疑问是,我的定时器设置超时2秒该怎么设置,我的意图是:在调用gethostbyname()这个函数时,如果超过两秒 则执行信号处理函数;
而不是 可能出现下列情况——A进程调用定时器,然后执行了gethostbyname(),执行一秒后,进程上下文切换,换到b进程,然后b进程执行了两秒,那这样的话 A进程的定时器 是不是已经到时间了……
   
上面说的那种情况是设置alarm(2);的情况吧?——不对请指正,


现在我发现了setitimer可以解决这个问题,但是 其中的ITIMER_VIRTUAL 和ITIMER_PROF的区别我却搞不清了,因为 PROF多了一个 进程在内核态的时间, 而 VIRTUAL只有用户态时间,  我现在就是想问, gethostbyname属于 内核态时间吗?


那如果我用用户态时间 设置时钟的话,那gethostbyname的调用时间 是不是就被忽略了呢……?很矛盾啊 谢谢各位了

|
首先要说的是,进程切换都是微妙级别,所以你们下面的说法是瞎担心了:
进程上下文切换,换到b进程,然后b进程执行了两秒,那这样的话 A进程的定时器 是不是已经到时间了.
你完全可以放心,执行进程b期间也肯定会有时间片分给A执行的,不会让A的定时器超过时间无法执行的。

调用setitimer有三个时间递减的计算方式:

ITIMER_REAL:计时器的值实时递减,发送的信号是SIGALRM

ITIMER_VIRTUAL:进程执行时递减计时器的值,发送的信号是SIGVTALRM

ITIMER_PROF:进程和系统执行时都递减计时器的值,发送的信号是SIGPROF

ITIMER_REAL,都是用户空间信息.

这里你使用ITIMER_REAL就可以了,绝对可以在定时器里面调用你的gethostbyname,放心去使用吧.


    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • linux下该如何取消用setitimer设置的定时器呢?
  • 如何用系统调用实现每秒钟显示一次系统时钟,可以用getitimer,setitimer,alarm?
  • 关于setitimer与子进程的问题
  • setitimer(ITIMER_REAL...以系统实时时间计算超时发出SIGALRM信号?
  • 定时器问题--setitimer 求助
  • 请教,setitimer的简单测试程序
  • 再问定时器-setitimer问题


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3