gpt4 book ai didi

c++ - 当系统时间更改时,QThread::sleep 无法正常工作

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:06:06 32 4
gpt4 key购买 nike

请帮我解决这个问题。

我创建了一个 QT 应用程序,它有一个 QThread。在 run 函数中,在 while(1) 循环中使用 QThread::sleep。我在调用 sleep 之前放置了 qDebug。当我运行程序时。 “ sleep ”日志将每 1 秒打印一次。之后,我通过命令 timedatectl set-time '2015-11-23 08:10:40' 更改系统时间。现在,“ sleep ”日志不再打印出来了!

void TestThread::run()
{
while (1) {
qDebug() << "sleep";
sleep(1);
}
}

感谢您的帮助!

最佳答案

查看源码后发现QThread::sleep有实现:

void QThread::sleep(unsigned long secs)
{
struct timeval tv;
gettimeofday(&tv, 0);
struct timespec ti;
ti.tv_sec = tv.tv_sec + secs;
ti.tv_nsec = (tv.tv_usec * 1000);
thread_sleep(&ti);
}

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);
}

关注此主题 https://linux.die.net/man/3/pthread_cond_timedwait .如果支持时钟选择选项,则条件变量应具有时钟属性,该属性指定用于测量由 abstime 参数指定的时间的时钟。当发生此类超时时,pthread_cond_timedwait() 仍应释放并重新获取 mutex 引用的互斥量。 pthread_cond_timedwait()函数也是一个取消点。

因此,如果我将系统更改为通行证, sleep 功能将一直 sleep 直到满足 >= 系统时间开始 sleep + sleep 周期。

关于c++ - 当系统时间更改时,QThread::sleep 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50039426/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com