【发布时间】:2018-04-26 09:27:07
【问题描述】:
请帮我解决这个问题。
我创建的一个QT 应用程序有一个QThread。在 run 函数中,在 while(1) 循环中使用 QThread::sleep。我在调用睡眠之前放置了 qDebug。当我运行程序时。 “睡眠”日志将每 1 秒打印一次。 之后,我通过命令 timedatectl set-time '2015-11-23 08:10:40' 更改系统时间。 现在,“睡眠”日志不再打印出来了!
void TestThread::run()
{
while (1) {
qDebug() << "sleep";
sleep(1);
}
}
感谢您的帮助!
【问题讨论】:
-
这听起来令人惊讶。出于好奇:如果将时间设置回今天(设置为过去之后),线程会再次打印吗?
-
是的!它再次打印。太令人惊讶了!
-
fwiw,不同的库,类似的问题:svn.boost.org/trac10/ticket/6787
-
我记得 Glib 提供了
sleep_for()和sleep_until()。其中一个在 Windows 中引起了麻烦(不幸的是,我忘记了其中的哪一个)。可能是,您的系统的实现已损坏。你的操作系统是什么? -
可能,在您的特定操作系统上更深入地研究
nanosleep()可能是值得的。 (我不得不承认我在 Windows 上开发了很多年(尽管我尝试编写可移植代码)。在我使用 Linux 和 Irix 之前,但那是很久以前的事了......)