crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> Waitable timer
zss
  опции профиля:
сообщение 30.3.2010, 10:27
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 112
Регистрация: 9.6.2009
Пользователь №: 815

Спасибо сказали: 0 раз(а)




Репутация:   0  


нужно однократное срабатывание таймера с возможностью проверки состояния и запуска заново.
есть ли что для данных целей.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 30.3.2010, 10:32
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9656
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Ну, собственно, QTimer
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
zss
  опции профиля:
сообщение 30.3.2010, 10:45
Сообщение #3


Участник
**

Группа: Участник
Сообщений: 112
Регистрация: 9.6.2009
Пользователь №: 815

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Litkevich Yuriy @ 30.3.2010, 10:32) *
Ну, собственно, QTimer


да вот что-то не работает
QTimer timer;
timer.start(5 * 1000);
while (timer.isActive())
{
    Sleep (100);
}

bool res = timer.isActive();


не выходит из цикла
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 30.3.2010, 10:52
Сообщение #4


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


zss,
не то пишешь.
читай внимательно документацию по QTimer
есть метод void setSingleShot ( bool singleShot ) к примеру
+
статический метод
void singleShot ( int msec, QObject * receiver, const char * member )
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
zss
  опции профиля:
сообщение 30.3.2010, 10:57
Сообщение #5


Участник
**

Группа: Участник
Сообщений: 112
Регистрация: 9.6.2009
Пользователь №: 815

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(kwisp @ 30.3.2010, 11:52) *
есть метод void setSingleShot ( bool singleShot ) к примеру

ничего не поменялось
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 30.3.2010, 11:11
Сообщение #6


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9656
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(zss @ 30.3.2010, 14:57) *
ничего не поменялось
а что ты сделал-то хоть?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
zss
  опции профиля:
сообщение 30.3.2010, 11:25
Сообщение #7


Участник
**

Группа: Участник
Сообщений: 112
Регистрация: 9.6.2009
Пользователь №: 815

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Litkevich Yuriy @ 30.3.2010, 12:11) *
Цитата(zss @ 30.3.2010, 14:57) *
ничего не поменялось
а что ты сделал-то хоть?


QTimer timer;
timer.setSingleShot(true);
timer.start(5 * 1000);
while (timer.isActive())
{
    Sleep (100);
}

bool res = timer.isActive();


судя по документации
Цитата
This property holds whether the timer is a single-shot timer.
A single-shot timer fires only once, non-single-shot timers fire every interval milliseconds.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 30.3.2010, 11:54
Сообщение #8


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


zss,
не удивительно, что ничего не поменялось!
зачем тебе и таймер и Sleep() ?
документацию не читал факт.

почему просто нельзя вызвать нужный метод с помощью статического метода ???
QTimer::singleShot(5000,this,SLOT(slMethod()))

=================
вот ещё метод
от BRE
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
zss
  опции профиля:
сообщение 30.3.2010, 12:39
Сообщение #9


Участник
**

Группа: Участник
Сообщений: 112
Регистрация: 9.6.2009
Пользователь №: 815

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(kwisp @ 30.3.2010, 12:54) *
zss,
не удивительно, что ничего не поменялось!
зачем тебе и таймер и Sleep() ?
документацию не читал факт.

почему просто нельзя вызвать нужный метод с помощью статического метода ???
QTimer::singleShot(5000,this,SLOT(slMethod()))

мне не нужен вызов метода. мне нужно ожидание отработки таймера.
Что-то вроде WaitForSingleObject на заданный период времени с возможностью проверки срабатывания.

З.Ы. Я вроде и тему так назвал. Sleep, чтоб просто показать, что есть некие действия
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 30.3.2010, 12:44
Сообщение #10


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


Цитата(zss @ 30.3.2010, 13:39) *
Sleep, чтоб просто показать, что есть некие действия

замечательно вводит в заблуждение по-моему.
while(timer.isActive()) -- не дает сработать циклу-обработчику событий, события времени -- обычные события, а ты запуская такой цикл не даешь обрабатывать события из очереди.
вариантов решения проблемы не один.
как вариант можно использовать
QCoreApplication::processEvents эта функция принудительно вызывает обработчик событий на месте своего вызова.

по ссылке мной приведённой ходил?

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 10.7.2020, 12:58