123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 |
- #ifndef __BASEREFCLOCK__
- #define __BASEREFCLOCK__
- #include <Schedule.h>
- const UINT RESOLUTION = 1;
- const INT ADVISE_CACHE = 4;
- const LONGLONG MAX_TIME = 0x7FFFFFFFFFFFFFFF;
- inline LONGLONG WINAPI ConvertToMilliseconds(const REFERENCE_TIME& RT)
- {
-
- return (RT / (UNITS / MILLISECONDS));
- }
- class CBaseReferenceClock
- : public CUnknown, public IReferenceClock, public CCritSec, public IReferenceClockTimerControl
- {
- protected:
- virtual ~CBaseReferenceClock();
- public:
- CBaseReferenceClock(__in_opt LPCTSTR pName,
- __inout_opt LPUNKNOWN pUnk,
- __inout HRESULT *phr,
- __inout_opt CAMSchedule * pSched = 0 );
- STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, __deref_out void ** ppv);
- DECLARE_IUNKNOWN
-
-
-
-
-
-
-
- STDMETHODIMP GetTime(__out REFERENCE_TIME *pTime);
-
-
-
- STDMETHODIMP AdviseTime(
- REFERENCE_TIME baseTime,
- REFERENCE_TIME streamTime,
- HEVENT hEvent,
- __out DWORD_PTR *pdwAdviseCookie
- );
-
- STDMETHODIMP AdvisePeriodic(
- REFERENCE_TIME StartTime,
- REFERENCE_TIME PeriodTime,
- HSEMAPHORE hSemaphore,
- __out DWORD_PTR *pdwAdviseCookie
- );
-
- STDMETHODIMP Unadvise(DWORD_PTR dwAdviseCookie);
-
-
-
-
-
-
-
- virtual REFERENCE_TIME GetPrivateTime();
-
- STDMETHODIMP SetTimeDelta( const REFERENCE_TIME& TimeDelta );
- CAMSchedule * GetSchedule() const { return m_pSchedule; }
-
-
-
- STDMETHODIMP SetDefaultTimerResolution(
- REFERENCE_TIME timerResolution
- );
- STDMETHODIMP GetDefaultTimerResolution(
- __out REFERENCE_TIME* pTimerResolution
- );
- private:
- REFERENCE_TIME m_rtPrivateTime;
- DWORD m_dwPrevSystemTime;
- REFERENCE_TIME m_rtLastGotTime;
- REFERENCE_TIME m_rtNextAdvise;
- UINT m_TimerResolution;
- #ifdef PERF
- int m_idGetSystemTime;
- #endif
- public:
- void TriggerThread()
- {
- EXECUTE_ASSERT(SetEvent(m_pSchedule->GetEvent()));
- }
- private:
- BOOL m_bAbort;
- HANDLE m_hThread;
- HRESULT AdviseThread();
- static DWORD __stdcall AdviseThreadFunction(__in LPVOID);
- protected:
- CAMSchedule * m_pSchedule;
- void Restart (IN REFERENCE_TIME rtMinTime = 0I64) ;
- };
- #endif
|