2014-02-04 4 views
0

Мне нужно запустить QThread :: usleep() в основном потоке (по разным причинам).
Однако спящий режим является защищенным от статического электричества.QThread спать по главной теме

Я хотел бы использовать функцию usleep QThread без оболочки (я в настоящее время использую unistd.h `s usleep), чтобы полностью охватить Qt, но не добавить дополнительную сложность для кода.

Возможно ли это? Если да, то какой самый простой (с точки зрения человека, читающего код) способ сделать это?

+4

Если вам нужно спать, вы должны, вероятно, переосмыслить свой дизайн. Сигнал и слот Qt управляются событиями и обычно будут делать все, что вам нужно. – g19fanatic

+0

+1 к комментарию @ g19fanatic, вы можете в большинстве случаев разделить свои методы на куски, которые вы вызвали позже. –

+1

Ваши туманные «различные причины» обычно сводятся к «Я делаю это неправильно» - по крайней мере, в случае применения gui , Если бы вы поделились своими причинами, кто-то мог указать вам, как это должно быть сделано правильно. Нить GUI никогда не должна блокироваться. Это так просто. Все остальное приведет к тому, что ваши пользователи ненавидят вас, рано или поздно. –

ответ

0

Лучший способ заключается в расширении QThread и разоблачить методы Xsleep общедоступными:

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);} 
}; 

Кстати. Qt5 изменил прозрачность методов QThread :: Xsleep.

+0

+1 для упоминания Qt5, так как мы в конце концов перейдем к нему! Если более простой/простой способ не найден, вы окончательно получаете ответ (хотя кажется, что это стыдно делать отдельный класс для него ~ –

+0

Я предполагаю, что они изменили его из-за слишком большого количества людей [делающих это неправильно] (http : //blog.qt.digia.com/blog/2010/06/17/youre-doing-it-wrong/). –

Смежные вопросы