sleep() 函数的原理是什么

「已注销」 2011-06-15 02:53:14

clock_t start=clock();
sleep(5);
clock_t end=clock();
float time=(float)(end-start)/CLOCKS_PER_SEC;
printf("Sleep clock:%f\n",time);

结果是:0.000000

sleep与时钟有什么关系呢,其原理是什么。
...全文
432 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
沭水河畔 2011-06-16
  • 打赏
  • 举报
回复
sleep的原理是這樣的,首先獲取當前系統滴答數A,然後再加上需要sleep的時長結合CPU時鐘頻率計算得到的滴答數B。再來一個while循環,循環體中不停獲取當前滴答數,大於(A+B)時跳出循環,函數返回。
wence 2011-06-16
  • 打赏
  • 举报
回复
sleep把进程的运行状态改为睡眠,将其从系统可执行队列去掉,这样系统就不会调度到该进程,不会分配CPU时间片。同时根据该进程的睡眠时间,将进程挂入相应的定时器队列中。
同时内核维持一个定时器队列,每一次时钟中断处理,都把当前到期的队列中的进程唤醒,加入到可运行进程队列中。 同时对所有挂入定时器队列中的进程时间值减1,
justkk 2011-06-15
  • 打赏
  • 举报
回复
clock 返回的是CPU的使用时间吧
在sleep 过程中,没有使用cpu时间,所以end=start
「已注销」 2011-06-15
  • 打赏
  • 举报
回复
http://www.windwood.name/blog/archives/487.html

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧