crossplatform.ru

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


  Ответ в Waitable timer
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
kwisp Дата 30.3.2010, 13:03
 
Цитата(zss @ 30.3.2010, 13:51) *
странно - я думал, что таймеры это объекты режима ядра и выполняются они не в контексте текущего процесса.

Qt же кросплатформенная - видимо с этим связано выполнение в обработчике событий. может таймер и посчитал всё верно, однако возможно он становится неактивным по приходу события окончания отсчёта, а событие не может быть обработано из за while(timer.isActive()) поэтому происходит зацикливание.
по-моему логично.
zss Дата 30.3.2010, 12:51
 
Цитата(kwisp @ 30.3.2010, 13:44) *
while(timer.isActive()) -- не дает сработать циклу-обработчику событий, события времени -- обычные события, а ты запуская такой цикл не даешь обрабатывать события из очереди.

странно - я думал, что таймеры это объекты режима ядра и выполняются они не в контексте текущего процесса.

Цитата(kwisp @ 30.3.2010, 13:44) *
QCoreApplication::processEvents эта функция принудительно вызывает обработчик событий на месте своего вызова.


помогло. спасибо. Но думал, что есть что-то схожее с CreateWaitableTimer, который не зависит от цикла обработки событий.
kwisp Дата 30.3.2010, 12:44
 
Цитата(zss @ 30.3.2010, 13:39) *
Sleep, чтоб просто показать, что есть некие действия

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

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

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

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

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

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

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

=================
вот ещё метод
от BRE
zss Дата 30.3.2010, 11:25
 
Цитата(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.
Litkevich Yuriy Дата 30.3.2010, 11:11
 
Цитата(zss @ 30.3.2010, 14:57) *
ничего не поменялось
а что ты сделал-то хоть?
zss Дата 30.3.2010, 10:57
 
Цитата(kwisp @ 30.3.2010, 11:52) *
есть метод void setSingleShot ( bool singleShot ) к примеру

ничего не поменялось
kwisp Дата 30.3.2010, 10:52
  zss,
не то пишешь.
читай внимательно документацию по QTimer
есть метод void setSingleShot ( bool singleShot ) к примеру
+
статический метод
void singleShot ( int msec, QObject * receiver, const char * member )
zss Дата 30.3.2010, 10:45
 
Цитата(Litkevich Yuriy @ 30.3.2010, 10:32) *
Ну, собственно, QTimer


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

bool res = timer.isActive();


не выходит из цикла
Просмотр темы полностью (откроется в новом окне)
RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 15.7.2025, 17:00