我爱电脑技术论坛's Archiver

白雪公主 发表于 2008-6-10 23:22

Linux下时间延迟以及延缓操作

1、在内核中计时的头函数是#include |2WT{Z
)K}XHv-r U

B;\!Y'M1b"_5v,L(b-L[ 2、Hz符号指出每秒钟产生的时钟滴答数,也就是1秒钟产生的时间中断。 ehU5xb8c8b*q o3n

(V$Zb@Tu }Ki $C2Lm!uR4Tj|8@6t
3、#include ,P n:TQ#e G
&eE4F}'d
volatile unsigned long jiffies 用这个变量来度量时间的变化。
vis5C9}4e
5sF4Q[Zg
6YF&x&M G P9l 4、int time_after(unsigned long a, unsigned long b)
-ZM5BiYz
[d0^#~ww I int time_before(unsigned long a, unsigned long b)
&\%x j0g}K
.}z5Xi K Go#\)N 这些布尔表达式以安全的方式比较jiffies的数值,无需考虑计时器溢出的问题。
'dfK,t[*~&w.pn T
,Bs"q{"n S'L
#a}k @T7c r e1W 5、jiffies表示的时间和其他表示方法之间的数值转换: M%g-U ~-m T

gBXL^8{!lGR
H` F!cW4_,[ G;f-z?Xq$qPc w'TM$\
unsigned long timespec_to_jiffies(struct timespec *value);
-yy]1q Jm K Q#HK?6GG%w7e/`
void jiffies_to_timespec(unsigned long jiffies, struct timespec *value);
g Z&aS4I"D(R~ 9o#uy-bJL7W S
unsigned long timeval_to_jiffies(struct timeval *value);
1i A'f+Em-^fo k
@&pKxq'U"] void jiffies_to_timeval(unsigned long jiffies, struct timeval *value); #w KL[/Y O['|

:Mp^ dnn N8DX E*^8r['D `}h ]
(每次总是记不住,这次写到blog上以备后患)其中timespec和timeval是linux系统中时钟时间的结构:
)[)\fe.z ,|L"vqc H}-D S

V;`8rF y*S%\8t
Ic0B8}qcxe struct timeval {
pp*yoS7P %Y2kl&Mik
time_t tv_sec; /* seconds */
?P7`{e{pM 9z,J|0L#qMy!_q
suseconds_t tv_usec; /* microseconds */ +v1Pps/D&r#M P
~F3t9Df3QH.S
};p P"qi S+NF6n
k(z/\2h9A0`~_t7`j
dZX}yDH

U`*I a@'}%L5Bd struct timespec
lSa6O(Joms q vT/tOnRA
{
CU S;})o3e6g c3{
C%X2w!ne,G long int tv_sec;
'X#_V3tr{P+C D!eGb)[%Zn;|
long int tv_nsec; .zaH/d*x|k+_,sY1PX7[

'j0| L3{ g&z` }; 1|w1M1]V$T;_
^q#AW,~?T)q {
,x#mI'P4RF&{6p,W
使用这个结构的头文件在#include 中,一般常用到的函数是:
.{ p F"ar^
j7x3v#m-h8s$Q
g-sJ3\EuqW *Ruk&s1z,N A
int gettimeofday(struct timeval *tv, struct timezone *tz);

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.