Qt: каков наилучший способ реализовать функцию сна внутри QThread? - PullRequest
0 голосов
/ 07 июня 2011

Я вызываю QThread с созданием объекта и с помощью функции MoveToThread Внутри объекта у меня есть цикл, и мне нужно иметь возможность установить спящий режим на несколько секунд между итерациями (для обновления основного графического интерфейса), при поиске в Интернете я получил эту ссылку:
http://www.qtcentre.org/threads/476-where-s-the-sleep%28%29-func
но это не работает внутри потоков, каков наилучший способ сделать это?

Ответы [ 2 ]

3 голосов
/ 07 июня 2011

Посмотрите на

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

методы QThread

Все эти методы защищены в qt4.Так что вам нужно получить от QThread доступ к ним, если вы используете qt4.Я не уверен, были ли они защищены в qt3 или нет.

0 голосов
/ 07 июня 2011

Вот как я обошёл проблему защиты функций 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
...