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

sleep和usleep的疑惑

    来源: 互联网  发布时间:2016-11-27

    本文导语:  sleep的精度是秒级的,usleep的精度是微秒级的。 我创建一个线程,每隔一毫秒累加计数,在线程每隔一秒查看一下计数,按照正常推算,1秒为1000毫秒,那打印结果应该是按1000增长,但是程序运行的结果让我不理解,...

sleep的精度是秒级的,usleep的精度是微秒级的。
我创建一个线程,每隔一毫秒累加计数,在线程每隔一秒查看一下计数,按照正常推算,1秒为1000毫秒,那打印结果应该是按1000增长,但是程序运行的结果让我不理解,结果如下:
251
502
752
1002

另外,我把代码复制到其他机器上,发现结果各不相同,当然机器有好有坏。
比较好机器的结果:
951
1902
2853

另一台配置不高的机器:
51
101
152
203
254
305

代码如下:
#include 
#include 
#include 
#include 

unsigned long long g_millisecond = 0;

void *timer(void)
{
sigset_t new_set;

sigemptyset(&new_set);
sigaddset(&new_set, SIGINT);
sigaddset(&new_set, SIGTERM);
sigaddset(&new_set, SIGSEGV);

pthread_sigmask(SIG_BLOCK, &new_set, NULL);

while(1){
usleep(1000);
g_millisecond++;
}

pthread_exit(0);
}


int main(int argc, char *argv[])
{
int ret;
pthread_t tid_timer;
pthread_attr_t tattr;

pthread_attr_init(&tattr);
pthread_attr_setdetachstate(&tattr, PTHREAD_CREATE_DETACHED);

ret = pthread_create(&tid_timer, &tattr, timer, NULL);
if(ret 

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












  • 相关文章推荐
  • 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