타이머 시스템

1741 단어 서버손놀림NeL
Rzyom 타이머 시스템은 다음과 같은 세 가지 유형으로 구성됩니다.
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];

좋은 웹페이지 즐겨찾기