Russian Qt Forum

Qt => Общие вопросы => Тема начата: vanessa от Мая 30, 2010, 18:33



Название: Кто может или как генерировать события синхронизированные с часами?
Отправлено: vanessa от Мая 30, 2010, 18:33
Мне нужен генератор сигналов, синхронизированный с системными часами, например каждую секунуд, но не в произвольный момент а при наступлении новой секунды. QTimer как-то так можно настроить или есть какой другой клас ?


Название: Re: Кто может или как генерировать события синхронизированные с часами?
Отправлено: SimpleSunny от Мая 30, 2010, 18:45
В идеальном мире, можно в цикле проверять время, и когда настанет новая секунда запустить QTimer.
На практике все может оказаться сложней. Ведь QTimer будет гарантировать только то, что время срабатывания сигнала больше запланированного время.


Название: Re: Кто может или как генерировать события синхронизированные с часами?
Отправлено: vanessa от Мая 30, 2010, 18:54
В идеальном мире, можно в цикле проверять время
Я так и сам мог бы сделать. Неужели нет ничего готового ?


Название: Re: Кто может или как генерировать события синхронизированные с часами?
Отправлено: SimpleSunny от Мая 30, 2010, 21:53
В Qt вряд ли есть такие средства.


Название: Re: Кто может или как генерировать события синхронизированные с часами?
Отправлено: Anarion от Мая 30, 2010, 22:59
А какой смысл проверять постоянно время?
1) Подготовить QTimer на интервал 1000 мс.
2) Затем запустить, например for, в каждом шаге которого проверять время по милисекундам, если не микросекундам. Когда секунда измениться запустить таймер, выйти из цикла брейком. Тот будет каждые 1000 мс (одну секунду) отсылать сигнал timeout().
Может быть, конечно, будет накапливаться погрешность, но сомневаюсь, что она будет сильно заметной. В таком случае можно, например, проводить синхронизацию каждую минуту (опять в цикле).
Если не так понял, извиняюсь.


Название: Re: Кто может или как генерировать события синхронизированные с часами?
Отправлено: ieroglif от Мая 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 ));
 

чисто теоретически вроде всё ок =)
на практике, скорее всего будет всё же разница в несколько миллисекунд.


Название: Re: Кто может или как генерировать события синхронизированные с часами?
Отправлено: Igors от Мая 31, 2010, 14:26
Мне нужен генератор сигналов, синхронизированный с системными часами, например каждую секунуд, но не в произвольный момент а при наступлении новой секунды. QTimer как-то так можно настроить или есть какой другой клас ?
Можно "прореживанием". Заряжаем таймер напр на 100 раз в секунду. Приходит сигнал от него, проверяем если время превысило заданное - акция.


Название: Re: Кто может или как генерировать события синхронизированные с часами?
Отправлено: vanessa от Мая 31, 2010, 22:00
Вот интересно как cron отследживает время ?


Название: Re: Кто может или как генерировать события синхронизированные с часами?
Отправлено: sne от Мая 31, 2010, 23:43
Вот интересно как cron отследживает время ?
Точно так же, в цикле смотрит время.