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

怎么设置时钟

    来源: 互联网  发布时间:2015-06-13

    本文导语:  类似vc中的settimer() | int getitimer(int which, struct itimerval *value); int setitimer(int which,conststruct itimerval *value, struct itimerval *ovalue);     下面我们具体学习一下各个参数的含义。   系统...

类似vc中的settimer()

|
int getitimer(int which, struct itimerval *value);
int setitimer(int which,conststruct itimerval *value, struct itimerval *ovalue);

 

  下面我们具体学习一下各个参数的含义。

  系统给每个进程提供了3个定时器,每个定时器在各自不同的域里面计数。当任何一个timer计数到结束了,系统就发送一个信号(signal)给该进程,同时计数器重置。

  一共支持以下3中计数器形式:

  ITIMER_REAL 在real time中计数器减1,然后等计数往比后发送SIGALRM信号。

  ITIMER_VIRTUAL 当进程在执行的过程中计数,然后当计数完毕后发送SIGVTALRM信号给该进程。

  ITIMER_PROF 在该进程被执行和系统在代表该进程执行的时间都进行计数。与ITIMERVIRTUAL比较,这个计时器可以同时记录该进程在用户态和内核态执行过程中消耗的时间。当计数完毕后,SIGPROF信号将发送给进程。

  Timer的值采用如下的结构体:


struct itimerval {
struct timeval it_interval; /* next value */
struct timeval it_value; /* current value */
};
struct timeval {
long tv_sec; /* seconds */
long tv_usec; /* microseconds */
};

 

  gettimer(2)用当前的设置的值填充value这个变量参数指向的结构体,而which参数指明查询的计数器的类型(ITIMER_REAL、 ITIMER_VIRTUAL 和 ITIMER_PROF中的一个)。结构体重的成员变量it_value中返回的是当前计数器还剩下的计数值;如果该成员变量返回的值是0,则表示该计时器被禁止了。与之类似,it_interval设置为计数器reset后的初始值。

  Settimer(2)通过输入参数value来设置指定的timer的相关属性。如果ovalue返回后的值非0,则该变量里面存储了timer以前的旧的设置值。

  计数器计数从it_value开始,减1操作,一直减到0;然后产生一个信号给使用该计时器的进程,然后reset计数器为it_interval。如果把timer设置为0,也就是说设置it_value为0或者当计数器计数完毕后,而it_interval为0,这时候计数器就停止工作。

  这里,tv_sec和tv_usec同时可以用来检测timer的的持续时间。

  返回值比较简单,如果成功则返回0,否则返回-1,然后相应的errno被设置为如下预先定义的一些值:

  EFAULT 参数value 和 ovalue 指针不合法。

  EINVAL which 的值不合法,不是ITIMER_REAL、 ITIMER_VIRT或者 ITIMER_PROF 中的一个。

  一些注意事项:

  在Linux环境下,产生和发送一个信号是截然不同的,而且同时只能有一个信号被发送给进程。这就可能存在一个小问题,例如,当系统存在一个非常繁重的作业调度的时候,如果采用ITIMER_REAL这种计时器,可能计数完毕,而前一次计数完毕后发出的信号还没有发送给用户进程,这时候,第二次的信号将被丢弃。

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












  • 相关文章推荐
  • C++ Bitsets 成员 count():返回被设置的位的个数
  • 在使用gcc之前,需要先设置环境吗?如何设置?在线等!!!
  • C++ I/O 成员 precision():设置精度
  • 用grub能否设置启动密码?如何设置?
  • C++ Bitsets 成员 any():如果有任何一个位被设置就返回true
  • 在linux服务器上面设置squid后怎么设置可以使客户端能使用QQ?
  • C++ Double Ended Queues(双向队列) 成员 assign():设置双向队列的值
  • 请问设置一个和root权限差不多的用户怎么设置?
  • C++ Vectors 成员 reserve():设置Vector最小的元素容纳数量
  • 用JSP。XML开发网站。请问那种环境设置最好。该如何设置环境
  • C++ Bitsets 成员 set():设置位
  • 环境变量设置设置与显示不一致
  • C++ Bitsets 成员 none():如果没有位被设置则返回true
  • linux下到底如何设置环境变量?在哪设置?详细具体点
  • C++ Strings(字符串) 成员 resize():重新设置字符串的大小
  • 紧急求救各位了:linux下有没有有设置报文最小长度的命令(好像只有设置报文最大长度MTU,通过ifconfig)?
  • Windows7自带防火墙设置:启动,关闭及高级设置
  • 怎么设置在Linux上面设置WEB服务器?请各位高手指教!!!
  • C++ Strings(字符串) 成员 reserve():保留一定容量以容纳字符串(设置capacity值)
  • linux中端口号设置是在哪个配置文件,该如何设置?
  • C++ I/O 成员 setf():设置格式标志
  • 100求救 jrun3.0 里的beans的设置,你登陆我的机器设置


  • 站内导航:


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

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

    浙ICP备11055608号-3