如何使用Qt延迟循环执行

Cur*_*ase 25 qt loops

在我的应用程序中,我希望在执行循环时,每次控件转移到循环时,每次执行都必须延迟特定时间.我怎样才能做到这一点?

Liv*_*ive 49

编辑(删除错误的解决方案).编辑(添加此其他选项):

另一种使用它的方法是子类QThread,因为它具有受保护的*睡眠方法.

QThread::usleep(unsigned long microseconds);
QThread::msleep(unsigned long milliseconds);
QThread::sleep(unsigned long second);
Run Code Online (Sandbox Code Playgroud)

这是创建自己的*sleep方法的代码.

#include <QThread>    

class Sleeper : public QThread
{
public:
    static void usleep(unsigned long usecs){QThread::usleep(usecs);}
    static void msleep(unsigned long msecs){QThread::msleep(msecs);}
    static void sleep(unsigned long secs){QThread::sleep(secs);}
};
Run Code Online (Sandbox Code Playgroud)

你通过这样做来调用它:

Sleeper::usleep(10);
Sleeper::msleep(10);
Sleeper::sleep(10);
Run Code Online (Sandbox Code Playgroud)

因此,这会给你10微秒,10毫秒或10秒的延迟.如果底层操作系统计时器支持该解决方案.


zmo*_*zmo 26

作为@Live的答案的更新,对于Qt≥5.2,不再需要子类QThread,因为现在睡眠函数是公共的:

静态公众成员

  • QThread * currentThread()
  • Qt::HANDLE currentThreadId()
  • int idealThreadCount()
  • void msleep(unsigned long msecs)
  • void sleep(unsigned long secs)
  • void usleep(unsigned long usecs)
  • void yieldCurrentThread()

cf http://qt-project.org/doc/qt-5/qthread.html#static-public-members


小智 9

C++ 11有一些便携式计时器的东西.查看sleep_for.