2011-03-01 6 views
8

02:30과 같이 특정 시간에 타이머를 시작하려고합니다. 매일 02시 30 분에 시작합니다.QTimer 특정 시간 시작

가능합니까? 너는 어떤 생각을 가지고 있니?

고맙습니다.

답변

9

QTimer는 기본적으로 특정 시간을 처리하지 않지만 QDateTime과 함께 사용하여 원하는 것을 얻을 수 있습니다. 즉, QDateTime 객체를 사용하여 몇 초 사이에 (지금 당장) 2시 30 분 (여기서 QDateTime :: msecsTo()가 특히 적합 해 보일지) 파악한 다음 QTimer를 설정하여 몇 초 후에 꺼내십시오. 필요한만큼 반복하십시오.

+0

타이머가 실행되는 동안 장치가 일시 중단되면 실패합니다. 너무 오래 실행됩니다. – ypnos

6

필요한 해상도에 따라 매분마다 발사되는 일반 QTimer를 사용할 수 있습니다.
timerEvent에서 적절한 시간 (QDateTime 사용)인지 확인하고 필요한 이벤트를 트리거 할 수 있습니다.

+1

이 접근법은 @ Jeremy 's보다 덜 우아하지만 사용자가 시스템 클럭을 재설정하기로 결정한 경우 중단되지 않는 추가 보너스를 제공합니다. – Septagram

1

Jeremy의 솔루션은 실제로 우아하지만 일광 절약 시간을 고려하지 않았습니다. 이를 방지하려면 매시간 타이머 이벤트를 발생시키고 벽시계를 확인해야합니다. Jeremy가 제안한 것처럼 대상에 대한 델타를 계산하고, 다음 시간대에 해당되면 타이머를 설정하여 시간별 타이머를 사용하지 않도록 설정하십시오.
그렇지 않은 경우 시간별 타이머가 다시 시작될 때까지 기다리십시오.

Pseudo code: 

Get wall clock time 
Calculate difference between target time and wall clock 
If difference < 1 hour: 
    Set timer to fire after difference secs 
    If this is a repeating event, restart the hourly timer 
Else: 
    Start watch timer to do this calculation again after one hour