Qt-Qt中让程序休眠的方法

发布于 2016-12-16 18:17:58 字数 64 浏览 1303 评论 2

Qt中并没有提供跨平台的sleep函数。只能调用系统的sleep。请问还有别的什么好的方法让Qt程序sleep么?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

浮生未歇 2017-04-08 08:12:23

对于平台相关的系统函数的调用,即使是Qt来提供,Qt也是会先判断当前的系统的。
Qt 定义了很多宏来判断不同的操作系统,比如:

Q_OS_LINUX // Defined on Linux.
Q_OS_UNIX // Defined on Any UNIX BSD/SYSV system.
Q_OS_WIN32 // Defined on all supported versions of Windows.
。。。

我们在写跨平台的程序时,如果Qt没有提供的系统调用,那么我们应该自己判断系统环境,根据不同的系统调用不同的系统函数。

瑾兮 2017-01-26 18:19:32

可以考虑使用QTime

QTime t;
t.start();
while(t.elapsed()<1000);

这种死循环也是一种常见错误用法。但改成正确的还是比较简单的:

QTime t;
t.start();
while(t.elapsed()<1000)
    QCoreApplication::processEvents();

不停地处理事件,以使得程序保持响应。

Qt4.7引入的新的类QElapsedTimer,和QTime相比,它提供了更快的计算 elapsed 时间的方法。

QElapsedTimer t;
t.start();
while(t.elapsed()<1000)
    QCoreApplication::processEvents();

使用上面几个函数最大的好处就是在Sleep的时候也可以保持界面的响应。

当然,可以通过宏定制自己的sleep函数。
QTest 模块中的函数很简单(windows下调用Sleep,其他平台调用 nanosleep):

void QTest::qSleep(int ms)
{
    QTEST_ASSERT(ms > 0);

#ifdef Q_OS_WIN
    Sleep(uint(ms));
#else
    struct timespec ts = { ms / 1000, (ms % 1000) * 1000 * 1000 };
    nanosleep(&ts, NULL);
#endif
}

参考链接:如何让 Qt 的程序使用 Sleep

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文