crossplatform.ru

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


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

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

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


Последние 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 Текстовая версия Сейчас: 28.3.2024, 20:29