|
결론부터 말하자면..
다음의 비교하는 부분에서는 밀리초(ms) 까지 비교합니다.
if(ComTi == MyTi)
그래서 Set한 값은 밀리초 값이 00일텐데..
실제로 현재 시간을 읽어보면 정확히 00ms로 되는 것이 거의 불가능하기 때문에..
같은 값이 나올 수가 없습니다. 그러므로 조건문은 false값으로 되는 것이구요.
그럼 문제는 간단하죠?
ms비교를 없애면 됩니다.(초 단위까지만 비교하게 하면 되는 것이죠..)
이 것을 조금 응용하면 시간 단위, 분 단위로 비교할수 있습니다.
그럼 시작하지요.
[순서]
1. 현재 시간을 읽어온다.
2. 설정한 시간과 현재 시간의 차를 구한다.
3. 구한 차 값에서 시간, 분, 초를 추출한다.
4. 추출한 값(시간, 분, 초)이 0인지 검사한다.(밀리초 값은 비교하지 않음).
5. 끝.
[예제 소스]
// 타이머에 넣은 소스
TDateTime SetTime, DifTime;
Word Hour, Min, Sec, MSec;
try{
SetTime = StrToTime(Edit1->Text);
DifTime = SetTime - Time(); // 설정값과 현재 시간의 차를 구하는 부분
DecodeTime(DifTime, Hour, Min, Sec, MSec); // 추출하는 부분(시,분,초,밀리초 추출)
if(!Hour && !Min && !Sec) // 추출한 시,분,초 값이 0이면(시, 분, 초 가 같으면)
{
// 일치할때의 처리
}
else
{
// 일치하지 않을때의 처리
}
}
catch(...)
{
// Edit1->Text 값을 TDateTime로 변환 불가능 할 경우 처리
}
조진수 님이 쓰신 글 :
: 제가 타이머를 이용해서 현재의 시간을 알아내고 제가 설정한 시간에 메세지를 뿌리려 하는데
:
: 안돼네여.... 답변좀 부탁드립니다.
:
: void __fastcall TForm1::TestTimerTimer(TObject *Sender)
: {
: TDateTime MyTi,ComTi;
:
: MyTi = StrToTime("11:28:00 PM");
: ComTi = Time();
:
: if(ComTi == MyTi)
: ShowMessage("OK");
: }
|