/* * Schedule.h */ #ifndef _SCHEDULE_H_ #define _SCHEDULE_H_ #if _MSC_VER > 1000 #pragma once #endif #include /* [Example] Schedule schedule; // ¸ÅÁÖ ¿ù¿äÀÏ ¿ÀÀü 6½Ã 30ºÐ¿¡ ÀÏÁ¤ ¼³Á¤ schedule.SetDayOfWeek(Schedule::MONDAY); schedule.SetHour(6); schedule.SetMinute(30); ScheduleToken token; if (schedule.FindNearestAhead(token)) { int secondsTo = token.SecondsTo(); if (secondsTo > 0) { printf("%d second(s) left\n", secondsTo); } else { printf("It's the time now!\n"); } } */ // ÀÏÁ¤ ½ÃÁ¡À» ³ªÅ¸³»´Â ÅäÅ« Ŭ·¡½º class ScheduleToken { public: ScheduleToken() : timer_(0), valid_(false) { str_[0] = '\0'; } int SecondsTo() const; // ÀÏÁ¤±îÁö ³²Àº ½Ã°£À» ÃÊ ´ÜÀ§·Î ¸®ÅÏ int SecondsTo(const SYSTEMTIME* st) const; void SetTimer(time_t timer); time_t GetTimer() const { return timer_; } void Invalidate() { valid_ = false; } bool IsValid() const { return valid_; } const TCHAR* ToString() const { return str_; } private: static const int MAX_TIME_FORMAT_LEN = 51; time_t timer_; bool valid_; TCHAR str_[MAX_TIME_FORMAT_LEN]; }; // ±ÔÄ¢ÀûÀ¸·Î ¹Ýº¹µÇ´Â ÀÏÁ¤À» À§ÇÑ Schedule Ŭ·¡½º class Schedule { public: // ¿äÀÏ »ó¼ö enum DayOfWeek { SUNDAY = 0 , MONDAY , TUESDAY , WEDNESDAY , THURSDAY , FRIDAY , SATURDAY , NUM_DAYS_OF_WEEK }; Schedule() : daysOfWeek_(0), hours_(0), minutes_(0) {} ~Schedule() {} void SetDayOfWeek(Schedule::DayOfWeek dayOfWeek) {daysOfWeek_ |= (1 << dayOfWeek); } void SetHour(int hour) { hours_ |= (1 << hour); } void SetMinute(int minute) { minutes_ |= ((DWORD64)1 << minute); } void SetDayOfWeek() { daysOfWeek_ = static_cast(~0); } // ¸ðµç ¿äÀÏ ¼±Åà void SetHour() { hours_ = static_cast(~0); } // ¸ðµç ½Ã ¼±Åà void SetMinute() { minutes_ = ~((DWORD64)0); } // ¸ðµç ºÐ ¼±Åà void ResetAll() { daysOfWeek_ = 0; hours_ = 0; minutes_ = (DWORD64)0; } bool FindNearestAhead(ScheduleToken& token) const; static time_t SystemTime2time_t(const SYSTEMTIME* st, long* ns = NULL); // Windows SYSTEMTIMEÀ» CRT time_t·Î static time_t FileTime2time_t(const FILETIME* ft, long* ns = NULL); // Windows FILETIMEÀ» CRT time_t·Î static void time_t2SystemTime(time_t timer, SYSTEMTIME* st); // CRT time_t¸¦ Windows SYSTEMTIMEÀ¸·Î static void time_t2FileTime(time_t timer, FILETIME* ft); // CRT time_t¸¦ Windows FILETIMEÀ¸·Î private: BYTE daysOfWeek_; // Bit Mask : ¸Å ÁÖ ¿äÀÏ ¼³Á¤ (7ÀÏ, 0~6) DWORD32 hours_; // Bit Mask : ½Ã°£ ¼³Á¤ (24½Ã°£, 0~23) DWORD64 minutes_; // Bit Mask : ºÐ ¼³Á¤ (60ºÐ, 0~59) // ºÐ ´ÜÀ§±îÁö¸¸ Áö¿ø }; #endif // _SCHEDULE_H_