LOGIN • JOININ

SCHEDULABLE EVENT

[Tutorials/[Server] 2. Event system/Tutorial_Event03_Schedule]



1... 스케쥴을 사용한 이벤트

만약 매분 10초, 20초, 35초에 어떤 이벤트를 실행해야 한다면 어떻게 앞에서 설명된 이벤트 객체로는 적합하지 않습니다.

실행 간격이 모두 일정한 것도 아니고 정해진 시간에만 실행하는 것도 아니기 때문입니다.

이럴 경우 ‘CGEvent::Object::CSchedule’이나 ‘CGEvent::Object::CScheduleFunction’을 사용하면 됩니다.

// 1) Event객체를 생성한다.
auto	pEvent	 = NEW<CTestEventObject>();

// 2) 매분 10초에 실행하는 Schedule등록.
auto	pSchedule	 = NEW<CGEvent::Schedule::CLambda>();
pSchedule->SetNextTime(TIME::SYSTEM::FUTURE(-1, -1, -1, -1, 10));
pSchedule->SetInterval(TIME::MINUTES(1));
pSchedule->SetFunction([](const TIME::SYSTEM::POINT& /*p_rTime*/)->bool
{
	printf("함수가 실행되었습니다. \n",); 
	return	true;
});
pEvent->AddSchedule(pSchedule);

// 3) 매분 20초에 실행하는 Schedule등록.
auto	pSchedule	 = NEW<CGEvent::Schedule::CLambda>();
pSchedule->SetNextTime(TIME::SYSTEM::FUTURE(-1, -1, -1, -1, 20));
pSchedule->SetInterval(TIME::MINUTES(1));
pSchedule->SetFunction([](const TIME::SYSTEM::POINT& /*p_rTime*/)->bool
{
	printf("함수가 실행되었습니다. \n",); 
	return	true;
});
pEvent->AddSchedule(pSchedule);

// 4) 매분 35초에 실행하는 Schedule등록.
auto	pSchedule	 = NEW<CGEvent::Schedule::CLambda>();
pSchedule->SetNextTime(TIME::SYSTEM::FUTURE(-1, -1, -1, -1, 35));
pSchedule->SetInterval(TIME::MINUTES(1));
pSchedule->SetFunction(pEvent, &CTestEventObject::ProcessEvent_Member);
pSchedule->SetFunction([](const TIME::SYSTEM::POINT& /*p_rTime*/)->bool
{
	printf("함수가 실행되었습니다. \n",); 
	return	true;
});
pEvent->AddSchedule(pSchedule);

// 5) Event를 등록한다.
pEvent->Register();