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
Есть вариант самому наваять таймер в зависимости от тиков процессора а внутри делать процессивантс. Может быть это и коряво - но работает лучше всего. И точность ожидания можно выставить очень большую...