从源代码看Qt的真相1-sleep

原创
2020/05/26 15:43
阅读数 290
void QThread::usleep ( unsigned long usecs ) [static protected]
Causes the current thread to sleep for usecs microseconds.
See also sleep() and msleep().
引发本线程sleep 若干微秒

在Windows下的真相

void QThread::usleep(unsigned long usecs)
{
    ::Sleep((usecs / 1000) + 1);
}

    大家可以看到了在windows下usleep的精度是Sleep的精度也就是毫秒级别的,小于毫秒级别的没有效果

Unix下的真相

static void thread_sleep(struct timespec *ti)
{
    pthread_mutex_t mtx;
    pthread_cond_t cnd;

    pthread_mutex_init(&mtx, 0);
    pthread_cond_init(&cnd, 0);

    pthread_mutex_lock(&mtx);
    (void) pthread_cond_timedwait(&cnd, &mtx, ti);
    pthread_mutex_unlock(&mtx);

    pthread_cond_destroy(&cnd);
    pthread_mutex_destroy(&mtx);
}

  Unix/Linux下Qt使用了pthread的

pthread_cond_timedwait

  让等待条件永远不能满足然后去等超时,类似于利用select实现sleep功能

  笔者对于linux的细节不太了解,这里能达到的精度完全依赖于pthread提供的超时精度。

 

   


展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部