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

sleep nanosleep select延时问题

    来源: 互联网  发布时间:2016-12-24

    本文导语:  int my_uint_sleep (double sleep_time) {      struct timespec tv;      tv.tv_sec = (time_t) sleep_time;      tv.tv_nsec = (long) ((sleep_time - tv.tv_sec) * 1e+9);      while (1)    {   printf("tv.tv_sec = %d n",tv.tv_sec); printf("tv.tv_nsec = %d n...


int my_uint_sleep (double sleep_time)
{  
   struct timespec tv;  
   tv.tv_sec = (time_t) sleep_time;  
   tv.tv_nsec = (long) ((sleep_time - tv.tv_sec) * 1e+9);  
   while (1)
   {  
printf("tv.tv_sec = %d n",tv.tv_sec);
printf("tv.tv_nsec = %d n",tv.tv_nsec);

int rval = nanosleep (&tv, &tv);    
printf("rval = %d ; nanosleep errno = %d n",rval,errno);

if (rval == 0)         
   return 0;    
else if (errno == EINTR) 

   printf("Interruped n");
   continue;    
}
else          
   return rval;  
     }  
     return 0;
}

当调用:   my_uint_sleep(5.1f);  的时候,errno 一直都是 516 (#define ERESTART_RESTARTBLOCK 516 /* restart by calling sys_restart_syscall */) 在程序的其他部分用到了定时器,所以nanosleep这个函数理论上会被中断而进入if (errno == EINTR)这个分支语句,实际情况确实返回 516 错误,请有碰到类似情况的朋友解答,谢谢!!!!!!

|
LZ ,我测试一切OK呢!



#include 
#include 
#include 
#include 
int my_uint_sleep (double sleep_time)
{
struct timespec tv;
tv.tv_sec = (time_t) sleep_time;
tv.tv_nsec = (long) ((sleep_time - tv.tv_sec) * 1e+9);
while (1)
{
printf("tv.tv_sec = %d n",tv.tv_sec);
printf("tv.tv_nsec = %d n",tv.tv_nsec);
int rval = nanosleep (&tv, &tv);
printf("rval = %d ; nanosleep errno = %d n",rval,errno);
if (rval == 0)
return 0;
else if (errno == EINTR)
{
printf("Interruped n");
continue;
}
else return rval;
}
return 0;
}


int main()
{
   my_uint_sleep(6.1f);
}

|
运行输出结果:

./1
tv.tv_sec = 6 
tv.tv_nsec = 99999904 
rval = 0 ; nanosleep errno = 0 

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












  • 相关文章推荐
  • select/sleep函数难道不能够被一个进程中的多个线程调用?
  • java命名空间java.util.concurrent枚举timeunit的类成员方法: sleep定义及介绍
  • 请问大侠们,线程中sleep到底行不行?? 希望是线程sleep的终结帖!!
  • java命名空间java.lang类thread的类成员方法: sleep定义及介绍
  • sleep在哪个头文件啊
  • sleep是进程域还是线程域的?
  • crond和sleep比较?
  • linux的sleep函数有什么用
  • Linux sleep() 进程与线程
  • man sleep的问题
  • 有什么系统调用的sleep是以毫秒作为精度的?
  • sleep() 函数的原理是什么
  • JAVA里有没有类似SLEEP的函数?
  • linux下的SLEEP N(SECONDS)是什么用的?
  • 送分! UNIX C编程。 如何休眠5秒钟? 类似WINDOWS下的Sleep(5000).
  • windows下死循环需要加sleep,否则CPU爆满, linux下呢?
  • 为什么要将一个进种sleep掉
  • sleep
  • 求教sleep(1000),着急!着急!着急!
  • 请教sleep和pthread_delay_np:阻塞线程/阻塞进程?
  • java 线程,对当前线程(非主线程)调用sleep,为什么主线程(窗口)也没反应了
  • UNIX下用 sleep 时,进程不回响应,kill 都不行,都没有别的办法?


  • 站内导航:


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

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

    浙ICP备11055608号-3