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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Кто может или как генерировать события синхронизированные с часами?  (Прочитано 4242 раз)
vanessa
Гость
« : Май 30, 2010, 18:33 »

Мне нужен генератор сигналов, синхронизированный с системными часами, например каждую секунуд, но не в произвольный момент а при наступлении новой секунды. QTimer как-то так можно настроить или есть какой другой клас ?
Записан
SimpleSunny
Гость
« Ответ #1 : Май 30, 2010, 18:45 »

В идеальном мире, можно в цикле проверять время, и когда настанет новая секунда запустить QTimer.
На практике все может оказаться сложней. Ведь QTimer будет гарантировать только то, что время срабатывания сигнала больше запланированного время.
Записан
vanessa
Гость
« Ответ #2 : Май 30, 2010, 18:54 »

В идеальном мире, можно в цикле проверять время
Я так и сам мог бы сделать. Неужели нет ничего готового ?
Записан
SimpleSunny
Гость
« Ответ #3 : Май 30, 2010, 21:53 »

В Qt вряд ли есть такие средства.
Записан
Anarion
Гость
« Ответ #4 : Май 30, 2010, 22:59 »

А какой смысл проверять постоянно время?
1) Подготовить QTimer на интервал 1000 мс.
2) Затем запустить, например for, в каждом шаге которого проверять время по милисекундам, если не микросекундам. Когда секунда измениться запустить таймер, выйти из цикла брейком. Тот будет каждые 1000 мс (одну секунду) отсылать сигнал timeout().
Может быть, конечно, будет накапливаться погрешность, но сомневаюсь, что она будет сильно заметной. В таком случае можно, например, проводить синхронизацию каждую минуту (опять в цикле).
Если не так понял, извиняюсь.
Записан
ieroglif
Гость
« Ответ #5 : Май 31, 2010, 00:50 »

псевдокод с намёком на классы Qt и с большой возможностью оптимизации =) . реальные функции не помню, но можно понять и отыскать их в хелпе.
Код
QTimer syncTimer();
connect(syncTymer,signal(timeout),this,slot(
 QTimer realTimer();
 realTimer.setInterval(1000); //1 sec
 connect(realTimer,signal(timeout),куда,slot(надо));
 realTimer.start();
));
QTime nowTime = QTime::current();
QString nextSecStr = nowTime.toStr("ЧЧ:ММ:") + QString::fromNumber( nowTime.toStr("СС").toNumber() + 2 ); //на всякий случай поставим на две секунды больше.
QTime nextSec = QTime::fromStr( nextSecStr );
syncTymer.singleShoot( nowTime.msecsTo( nextSecs ));
 

чисто теоретически вроде всё ок =)
на практике, скорее всего будет всё же разница в несколько миллисекунд.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #6 : Май 31, 2010, 14:26 »

Мне нужен генератор сигналов, синхронизированный с системными часами, например каждую секунуд, но не в произвольный момент а при наступлении новой секунды. QTimer как-то так можно настроить или есть какой другой клас ?
Можно "прореживанием". Заряжаем таймер напр на 100 раз в секунду. Приходит сигнал от него, проверяем если время превысило заданное - акция.
Записан
vanessa
Гость
« Ответ #7 : Май 31, 2010, 22:00 »

Вот интересно как cron отследживает время ?
Записан
sne
Гость
« Ответ #8 : Май 31, 2010, 23:43 »

Вот интересно как cron отследживает время ?
Точно так же, в цикле смотрит время.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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