linux下的精确wait

简介:

源代码:

#include  < sys / time.h >
#include 
< stdio.h >
#include 
< time.h >

inline 
double
now()
{
    timeval tv;
    gettimeofday(
& tv,  0 );
    
double  s  =  (tv.tv_sec);
    s 
+=  (1e - 6   *  tv.tv_usec);
    
return  s;
}

inline 
void
wait(
double  sec)
{
    
double  start_time  =  now();

    
const   double  SLEEP_MIN_TIME  =   0.005 ;        
    
    
// 当等待时间>SLEEP_MIN_TIME时,调用nanosleep() API,避免过多占用内存。
    
// nanosleep() API的精度约为200us。
    
    
if (sec  >  SLEEP_MIN_TIME)
    {
        
double  sleep_time  =  sec - SLEEP_MIN_TIME;
        
struct  timespec sleep_;
        
int  seconds  =  static_cast < int > (sleep_time);
        sleep_.tv_sec 
=  seconds;
        sleep_.tv_nsec 
=  static_cast < int > ((sleep_time - seconds) * 1e9);
        nanosleep(
& sleep_,NULL);            
    }

    
// 开始循环取时,判断时间是否到了。
     for (;;)
    {
        
if ((now()  -  start_time)  >  sec)  break ;
    }
}

测试,在2.6内核,迅驰1.6G环境下,精确度大概能到0.00001 s,即10us。

本文转自xiaotie博客园博客,原文链接http://www.cnblogs.com/xiaotie/archive/2006/02/05/325771.html如需转载请自行联系原作者


xiaotie 集异璧实验室(GEBLAB)

相关文章
|
6月前
|
Linux
【Linux】—— 进程等待 wait&&waitpid
【Linux】—— 进程等待 wait&&waitpid
132 0
【Linux】—— 进程等待 wait&&waitpid
|
6月前
|
Linux
【Linux 系统编程】wait函数详解
【Linux 系统编程】wait函数详解
183 0
|
6月前
|
Linux
进程等待(wait和wait函数)【Linux】
进程等待(wait和wait函数)【Linux】
104 0
|
6月前
|
Linux
linux中wait与waitpid函数使用场景及扩展
linux中wait与waitpid函数使用场景及扩展
|
存储 缓存 固态存储
Linux系统之Wait CPU time解析
上篇文章我们简要解析了用户CPU时间相关概念及应用实践,具体可参考链接🔗: Linux系统之User CPU time解析。 回顾之前的内容:在Linux操作系统中,通常采用8个不同的指标来研究Linux / Unix操作系统中的CPU消耗:用户CPU时间(us)、系统CPU时间(sy)、良好的CPU时间(ni)、空闲CPU时间(id)、等待CPU时间(wa)、硬件中断CPU时间(hi),软件中断CPU时间(si),被盗CPU时间(st)。在本文中,我们主要针对“等待CPU时间”进行解析。
212 0
Linux系统之Wait CPU time解析
|
Linux
Linux系统应用编程---进程原语(fork、exec、wait&waitpid)
Linux系统应用编程---进程原语(fork、exec、wait&waitpid)
189 0
|
Shell Linux C语言
【Linux进程】六、wait()函数——子进程回收
【Linux进程】六、wait()函数——子进程回收
473 0
【Linux进程】六、wait()函数——子进程回收
|
Linux
Linux进程实践(4) --wait避免僵尸进程
Wait的背景    当子进程退出的时候,内核会向父进程发送SIGCHLD信号,子进程的退出是个异步事件(子进程可以在父进程运行的任何时刻终止)    子进程退出时,内核将子进程置为僵尸状态,这个进程称为僵尸进程,它只保留最小的一些内核数据结构,以便父进程查询子进程的退出状态。
919 0
下一篇
无影云桌面