Russian Qt Forum
Октябрь 05, 2024, 14:16 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Аналог Sleep, GetTickCount  (Прочитано 27312 раз)
SABROG
Гость
« Ответ #15 : Май 25, 2007, 08:24 »

Вместо слипа можно использовать QTimer:

Код:

 #include <QApplication>
 #include <QTimer>

 int main(int argc, char *argv[])
 {
     QApplication app(argc, argv);
     QTimer::singleShot(600000, &app, SLOT(quit()));
     ...
     return app.exec();
 }


А вот насчет GetTickCount вопрос остался открытым, хочу знать сколько тиков проходит от одного участка кода до другого.
Записан
Tonal
Гость
« Ответ #16 : Май 25, 2007, 10:23 »

Цитировать
void QTime::start ()
Sets this time to the current time. This is practical for timing:
Код:

 QTime t;
 t.start();
 some_lengthy_task();
 qDebug("Time elapsed: %d ms", t.elapsed());

Оно?
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #17 : Май 25, 2007, 11:15 »

Цитата: "Разуев Максим"
Так каким всетаки образом сделать задержку на нужное количество секунд в программе.


Выше было предложено несколько вариантов. Разве они не подходят?

добавлено спустя 4 минуты:

 
Цитата: "SABROG"

А вот насчет GetTickCount вопрос остался открытым, хочу знать сколько тиков проходит от одного участка кода до другого.


А чем не подходит QTime (statr(), elapsed())? Про это я писал несколькими постами выше.
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Разуев Максим
Гость
« Ответ #18 : Май 26, 2007, 04:04 »

Во первых я говорил именно о задержке на нужное количество секунд в указанном месте (QTimer не подходит, он толоко генерирует событие). Про QTest я как раз и спросил что нужно ли пользоватся библиотекой для тестов в обычной программе.
Единственный вариант который я выкопал (а потом и увидел в ветке) это QTime.
Но при его применении возникла проблема:
Почемуто все периоды ожидания складываются, т.е. если было три действия с двумя промежутками по 3 секунды то сначала происходит ожидание 6 секунд, а потом подряд выполняются все действия хотя в программе они перебираются в последовательном цикле (дествие1 - ожидание1 - действие2 - ожидание2 - ...). Такое ощущение что QTime распараллеливается с основным циклом.
Не подскажете что нибудь а то очень нужно.
Дополнение:
Фактически у меня реализация мультиссылки - т.е. переключение нескольких страниц, рисунков, звуков и видео с промежутками между ними.
Нужна гарантированная задержка на n секунд.
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #19 : Май 26, 2007, 10:26 »

Цитата: "Разуев Максим"

Нужна гарантированная задержка на n секунд.


В одном из своих постов выше, я привёл код для sleep

Код:
void mysleep(unsigned int umilliseconds ) 
{
#ifdef Q_WS_WIN
    Sleep(umilliseconds);
#else
    usleep( umilliseconds * 1000 );
#endif
}


он не подходит?
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
goer
Гость
« Ответ #20 : Май 26, 2007, 10:52 »

Цитировать
А чем не подходит QTime (statr(), elapsed())? Про это я писал несколькими постами выше.


Цитировать
Во первых я говорил именно о задержке на нужное количество секунд в указанном месте (QTimer не подходит, он толоко генерирует событие).


Ну так, стартуешь таймер и заходишь в свой QEventLoop. Он ничего не делает ~= задержка. В слоте elapsed() соответственно выходишь из QEventLoop-а.


Через системные вызовы впринципе тоже можно, тут уж кто за что ратует..
Записан
Разуев Максим
Гость
« Ответ #21 : Май 26, 2007, 13:57 »

Каким образом входить в QEventLoop, подскажи.

Цитата: "pastor"
Цитата: "Разуев Максим"

Нужна гарантированная задержка на n секунд.


В одном из своих постов выше, я привёл код для sleep

Код:
void mysleep(unsigned int umilliseconds ) 
{
#ifdef Q_WS_WIN
    Sleep(umilliseconds);
#else
    usleep( umilliseconds * 1000 );
#endif
}


он не подходит?


Поясни что за функции вызываются - системные?
Хотелось бы средствами Qt.
Кстати может можно както использовать функции QTread, а то sleep-ы в нем хоть и static но private(почему?).
Записан
goer
Гость
« Ответ #22 : Май 26, 2007, 15:35 »

Код:


QEventLoop el; //член данных класса

//организация задержки
QTimer::singleShot(600000, this, SLOT(timeout()));
el.exec();


void timeout() //слот того же класса
{
   el.quit();
}



Даже несмотря на то что в определенной точке мы входим в подцикл обработки событий, по идее слот таймаут должен вызваться.


Если вариант несработает то можно наследованием от QEventLoop-а.
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #23 : Май 26, 2007, 17:21 »

Цитата: "Разуев Максим"

Поясни что за функции вызываются - системные?
Хотелось бы средствами Qt.
Кстати может можно както использовать функции QTread, а то sleep-ы в нем хоть и static но private(почему?).


Да, это вызываються системные функции. Прямых аналогов в Qt нет
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Разуев Максим
Гость
« Ответ #24 : Май 26, 2007, 23:53 »

Спасибо через EventLoop работает идеально.
Записан
SABROG
Гость
« Ответ #25 : Май 27, 2007, 10:07 »

Цитата: "Разуев Максим"
Спасибо через EventLoop работает идеально.


А цикл не грузит процессор ? А то ведь есть разница, одно дело остановить приложение и ничего не делать, а другое создать цикл, который все время будет прыгать туда-сюда выполняя машинную инструкцию.
Записан
Разуев Максим
Гость
« Ответ #26 : Май 27, 2007, 10:36 »

По времени вроде один в один.
Кстати дополнение:
Таймеры можно не создавать отдельно. Есть таймер встроеный в QObject.
Записан
goer
Гость
« Ответ #27 : Май 27, 2007, 10:54 »

Цитировать
А цикл не грузит процессор ?


А вот нет Улыбающийся Любопытно что
Код:
while (true) ;

грузит проц на 100%, а QEventLoop::exec()  на 0%.
Записан
Dimchansky
Гость
« Ответ #28 : Май 31, 2007, 15:34 »

Цитата: "Разуев Максим"
Так каким всетаки образом сделать задержку на нужное количество секунд в программе.


Вам же выше Alex_X привел пример.
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.05 секунд. Запросов: 23.