타이머 시스템
class CTimer;
class CTimerEvent;
class CTimerManager;
CTimerEvent는 사용자가 자신의 이벤트 처리 클래스를 파생하고 시간 리셋 인터페이스timerCallback()을 다시 실현하여 해당하는 이벤트를 처리하는 데 사용됩니다.
CTimer 공통 타이머 클래스, 시간 설정, 시간 설정 후 timerCallback () 을 리셋합니다.
이 대상이 삭제되면 리셋이 자동으로 취소됩니다.
타이머는 트리거 시간만 설정할 수 있으며, 두 번째 설정은 이전 시간을 덮어씁니다.
CTimer Manager 이것은 tickUpdate () 에서 시간이 된 CTimer Event를 터치하는 단례입니다.timerCallback() .
주: 이 시스템의 유일한 요구는 CTimer Manager::tickUpdate () 는 모든 게임 순환에서 호출되어야 한다는 것입니다.
사용 방법 & 절차:
class CMyClass;
class CMyTimerEvent;
class CMyTimerEvent: public CTimerEvent
{
public:
CMyTimerEvent(CMyClass* parent);
void timerCallback(CTimer* owner);
private:
CMyClass* _Parent;
}
class CMyClass
{
public:
void startTimer()
{
// set the timer to trigger in 5000 millisecond
_Timer.setRemaining(5000,new CMyTimerEvent(this));
}
void doSomething(CTimerEvent* event)
{
nlinfo("hello world");
// set the timer to trigger in 2000 millisecond with the same event handler
_Timer.setRemaining(2000,event);
}
private:
CMyTimer _Timer;
};
void CMyTimerEvent::CMyTimerEvent(CMyClass* parent)
{
_Parent=parent;
}
void CMyTimerEvent::timerCallback(CTimer* owner)
{
_Parent->doSomething(this);
}
이 타이머 시스템의 정밀도는 서버의 프레임당 실행 시간과 관계가 있으며, 기본값은 100밀리초입니다.
CTimerEvent는 정시 시간을 게임 순환권 수로 환산하고hash를 한 vector에 저장한 후 매번 게임 순환 검사_EventVectors[uint8(fps&0xff)].
// the type of the event vector for a given time hash
typedef std::vector<NLMISC::CSmartPtr<CTimerEvent> > TEventVector;
TEventVector _EventVectors[256];
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
집 서버 설계 (하드웨어 편)자신의 Redmine이나 ownCloud를 운용하기 위해 사쿠라 VPS, DigitalOcean, OpenShift 등을 놀랐습니다만, 침착 해 왔으므로 현상을 정리하고 싶습니다. 먼저 하드웨어 구성을 정리합니다. ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.