Russian Qt Forum

Qt => Общие вопросы => Тема начата: Примерный ученик от Октября 31, 2009, 13:18



Название: Аналог Delay
Отправлено: Примерный ученик от Октября 31, 2009, 13:18
Есть ли в QT3.3.8 аналог функции Delay(int msec).
Нужно сделать паузу секунд на 20.
Или только через QTimer?


Название: Re: Аналог Delay
Отправлено: Примерный ученик от Октября 31, 2009, 13:53
В, общем, сделал
Код:
		QTime d=QTime::currentTime();
QTime dd=QTime::currentTime();
while (abs(dd.second()-d.second())<20)
dd=QTime::currentTime();


Название: Re: Аналог Delay
Отправлено: Igors от Октября 31, 2009, 13:59
Есть qSleep, qWait


Название: Re: Аналог Delay
Отправлено: Примерный ученик от Октября 31, 2009, 14:10
Есть qSleep, qWait

QT 3.3.8 ничего такого нет


Название: Re: Аналог Delay
Отправлено: Mikhail от Октября 31, 2009, 18:24
проще всего используй QTime::elapsed ()

int QTime::elapsed () const
Returns the number of milliseconds that have elapsed since the last time start() or restart() was called.

Note that the counter wraps to zero 24 hours after the last call to start() or restart.

Note that the accuracy depends on the accuracy of the underlying operating system; not all systems provide 1-millisecond accuracy.

Warning: If the system's clock setting has been changed since the last time start() or restart() was called, the result is undefined. This can happen when daylight savings time is turned on or off.


See also start() and restart().


Название: Re: Аналог Delay
Отправлено: pastor от Октября 31, 2009, 19:30
Выполни поиск по форуму на предмет "Delay"


Название: Re: Аналог Delay
Отправлено: Примерный ученик от Октября 31, 2009, 22:22
Выполни поиск по форуму на предмет "Delay"
Пробовал,0


Название: Re: Аналог Delay
Отправлено: Alex Custov от Ноября 01, 2009, 02:41
Есть ли в QT3.3.8 аналог функции Delay(int msec).
Нужно сделать паузу секунд на 20.
Или только через QTimer?

Можно использовать свой код.

Код
C++ (Qt)
class Sleeper : public 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); }
};
 


Название: Re: Аналог Delay
Отправлено: pastor от Ноября 01, 2009, 15:42
Пробовал,0

Ой, ошибся :) Выполни поиск по "sleep"


Название: Re: Аналог Delay
Отправлено: Alex Custov от Ноября 01, 2009, 15:58
Ой, ошибся :) Выполни поиск по "sleep"

Выполни тоже :) 3 результата, все в этой теме.

Я тоже припоминаю похожие темы, но не могу найти  ???


Название: Re: Аналог Delay
Отправлено: Примерный ученик от Ноября 01, 2009, 16:28
нашел
http://www.prog.org.ru/topic_8200_0.html


Название: Re: Аналог Delay
Отправлено: shadone от Ноября 01, 2009, 16:55
В, общем, сделал
Код:
		QTime d=QTime::currentTime();
QTime dd=QTime::currentTime();
while (abs(dd.second()-d.second())<20)
dd=QTime::currentTime();
это ооооочень плохой код который полность. загружает процессор без необходимости.  Как минимум в тело цикла нужно добавить QThread::yieldCurrentThread().

вообще есть хорошее правило - если в приложении нужен метод типа Sleep/Delay, то очень очень неправильно в дизайне приложения. Именно из этих соображений в Qt нет и не будет подобных функций.


Название: Re: Аналог Delay
Отправлено: Примерный ученик от Ноября 01, 2009, 17:14
А если

void QThread::sleep ( unsigned long secs );

в потоке?


Название: Re: Аналог Delay
Отправлено: Igors от Ноября 01, 2009, 18:03
Ну если нет в 3.3.8 - не помирать же  :)
Код:
void MySleep( unsigned int seconds )
{
#ifdef _WIN32
 Sleep(seconds * 1000);
#else
 sleep(seconds);
#endif
}


Название: Re: Аналог Delay
Отправлено: Примерный ученик от Ноября 01, 2009, 18:56
В, общем, сделал
Код:
		QTime d=QTime::currentTime();
QTime dd=QTime::currentTime();
while (abs(dd.second()-d.second())<20)
dd=QTime::currentTime();
это ооооочень плохой код который полность. загружает процессор без необходимости.  Как минимум в тело цикла нужно добавить QThread::yieldCurrentThread().

вообще есть хорошее правило - если в приложении нужен метод типа Sleep/Delay, то очень очень неправильно в дизайне приложения. Именно из этих соображений в Qt нет и не будет подобных функций.

Ты прав.

sleep(x)

не грузит проц, а мой вариант ужжжасно грузит. Спасибо за наводку... ;D


Название: Re: Аналог Delay
Отправлено: pastor от Ноября 02, 2009, 13:50
Выполни тоже :) 3 результата, все в этой теме.

Ненужно ля-ля ))

Выйди на глявную страницу форума, набери sleep, получишь 3 страницы результата поиска. Рассматривалось много вариантов реализации sleep.


Название: Re: Аналог Delay
Отправлено: SABROG от Ноября 05, 2009, 13:16
Локальный QEventLoop с QTimer::singleShot() не грузит проц.


Название: Re: Аналог Delay
Отправлено: break от Ноября 11, 2009, 02:32
я не знаю есть ли это в вашей версии Qt но есть QTest::qSleep и QTest::qWait - одна из них не дает умереть пользовательскому интерфейсу


Название: Re: Аналог Delay
Отправлено: Aleksey_Zh от Ноября 11, 2009, 09:02
Есть вариант самому наваять таймер в зависимости от тиков процессора а внутри делать процессивантс. Может быть это и коряво - но работает лучше всего. И точность ожидания можно выставить очень большую...