【问题标题】:Qt :what is the best way to implement sleep function inside QThread?Qt:在 QThread 中实现睡眠功能的最佳方法是什么?
【发布时间】:2011-09-10 01:09:03
【问题描述】:

我通过创建对象和使用 MoveToThread 函数来调用 QThread,就像它建议的那样 在我有循环的对象内部,我需要能够在迭代之间设置睡眠几秒钟(以更新主 GUI)搜索网络让我找到了这个链接:
http://www.qtcentre.org/threads/476-where-s-the-sleep%28%29-func
但这在线程内部不起作用,最好的方法是什么?

【问题讨论】:

  • 您可能会考虑使用 QTimer 定期向您的线程发送信号 - 这样您的线程大部分时间都不会被阻塞,并且关闭您的应用程序之类的事情可能会发生得更快(因为您的主线程不必等待您的 QThread 在 QThread::wait() 返回之前完成睡眠)
  • Jeremy 是对的,您应该考虑其他可能性,在线程中休眠通常是使用中架构受限的标志。许多解决方案存在于 Qt 中,尤其是 Qt!也许一些代码可以帮助找到解决方案。

标签: c++ qt sleep qthread


【解决方案1】:

看看

void    msleep ( unsigned long msecs )
void    sleep ( unsigned long secs )
void    usleep ( unsigned long usecs )

QThread的方法

这些方法都在qt4中受到保护。因此,如果您使用的是 qt4,则需要从 QThread 派生来访问它们。我不确定它们是否在 qt3 中受到保护。

【讨论】:

    【解决方案2】:

    这就是我解决QThread sleep 函数受到保护的问题的方法:

    // QThread has static sleep functions; but they're protected (duh).
    // So we provide wrapper functions:
    //
    //    void MyLib::sleep (unsigned long secs)
    //    void MyLib::msleep (unsigned long msecs)
    //    void MyLib::usleep (unsigned long usecs)
    
    #include <QThread>
    
    namespace MyLib
      {
      class DerivedFromQThread : protected QThread
        {
      public:
        static void sleep (unsigned long secs)   { QThread::sleep (secs) ; }
        static void msleep (unsigned long msecs) { QThread::msleep (msecs) ; }
        static void usleep (unsigned long usecs) { QThread::usleep (usecs) ; }
        } ;
      void sleep (unsigned long secs)   { DerivedFromQThread::sleep (secs) ; }
      void msleep (unsigned long msecs) { DerivedFromQThread::msleep (msecs) ; }
      void usleep (unsigned long usecs) { DerivedFromQThread::usleep (usecs) ; }
      } // namespace MyLib
    

    【讨论】:

      猜你喜欢
      • 2018-02-10
      • 1970-01-01
      • 2013-02-06
      • 1970-01-01
      • 2021-04-12
      • 1970-01-01
      • 1970-01-01
      • 2016-10-12
      相关资源
      最近更新 更多