24 #include "wine/unicode.h" 76 if (
NULL == prev_it) {
90 #define MAX_REFTIME (REFERENCE_TIME)(0x7FFFFFFFFFFFFFFF) 91 #define ADVISE_EXIT (WM_APP + 0) 92 #define ADVISE_REMOVE (WM_APP + 2) 93 #define ADVISE_ADD_SINGLESHOT (WM_APP + 4) 94 #define ADVISE_ADD_PERIODIC (WM_APP + 8) 119 it =
This->pSingleShotAdvise;
133 for (it =
This->pPeriodicAdvise;
NULL != it; it = it->
next) {
143 if (timeOut > tmpTimeOut) timeOut = tmpTimeOut;
155 switch (
msg.message) {
169 ERR(
"Unhandled message %u. Critical Path\n",
msg.message);
218 *ppobj = &
This->IReferenceClock_iface;
236 This->safe.DebugInfo->Spare[0] = 0;
245 DWORD curTimeTickCount;
257 if (
This->lastTimeTickCount == curTimeTickCount)
hr =
S_FALSE;
259 This->lastTimeTickCount = curTimeTickCount;
275 if (0 >= rtBaseTime + rtStreamTime) {
278 if (
NULL == pdwAdviseCookie) {
288 pEntry->rtBaseTime = rtBaseTime + rtStreamTime;
289 pEntry->rtIntervalTime = 0;
311 if (0 >= rtStartTime || 0 >= rtPeriodTime) {
314 if (
NULL == pdwAdviseCookie) {
324 pEntry->rtBaseTime = rtStartTime;
325 pEntry->rtIntervalTime = rtPeriodTime;
342 TRACE(
"(%p, %lu)\n",
This, dwAdviseCookie);
394 obj->safe.DebugInfo->Spare[0] = (
DWORD_PTR)(__FILE__
": SystemClockImpl.safe");
static const IReferenceClockVtbl SystemClock_Vtbl
SystemClockAdviseEntry * prev
BOOL WINAPI TranslateMessage(_In_ const MSG *)
SystemClockAdviseEntry * pPeriodicAdvise
VOID WINAPI DECLSPEC_HOTPATCH Sleep(IN DWORD dwMilliseconds)
static void QUARTZ_RemoveAviseEntryFromQueue(SystemClockImpl *This, SystemClockAdviseEntry *pEntry)
#define ADVISE_ADD_SINGLESHOT
VOID WINAPI CoTaskMemFree(LPVOID ptr)
SystemClockAdviseEntry * next
TW_UINT32 TW_UINT16 TW_UINT16 MSG
DWORD WINAPI GetTickCount(VOID)
#define ERROR_INVALID_THREAD_ID
BOOL WINAPI DECLSPEC_HOTPATCH SetEvent(IN HANDLE hEvent)
DWORD WINAPI GetLastError(VOID)
static HRESULT WINAPI SystemClockImpl_GetTime(IReferenceClock *iface, REFERENCE_TIME *pTime)
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
REFERENCE_TIME lastRefTime
IReferenceClock IReferenceClock_iface
#define ADVISE_ADD_PERIODIC
static DWORD WINAPI SystemClockAdviseThread(LPVOID lpParam)
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
static HRESULT WINAPI SystemClockImpl_AdvisePeriodic(IReferenceClock *iface, REFERENCE_TIME rtStartTime, REFERENCE_TIME rtPeriodTime, HSEMAPHORE hSemaphore, DWORD_PTR *pdwAdviseCookie)
LRESULT WINAPI DispatchMessageW(_In_ const MSG *)
static ULONG WINAPI SystemClockImpl_Release(IReferenceClock *iface)
_In_ PCCERT_CONTEXT _In_opt_ LPFILETIME pTime
HANDLE WINAPI DECLSPEC_HOTPATCH CreateThread(IN LPSECURITY_ATTRIBUTES lpThreadAttributes, IN DWORD dwStackSize, IN LPTHREAD_START_ROUTINE lpStartAddress, IN LPVOID lpParameter, IN DWORD dwCreationFlags, OUT LPDWORD lpThreadId)
VOID WINAPI InitializeCriticalSection(OUT LPCRITICAL_SECTION lpCriticalSection)
HRESULT QUARTZ_CreateSystemClock(IUnknown *pUnkOuter, LPVOID *ppv)
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
BOOL WINAPI SetThreadPriority(IN HANDLE hThread, IN int nPriority)
static HRESULT WINAPI SystemClockImpl_AdviseTime(IReferenceClock *iface, REFERENCE_TIME rtBaseTime, REFERENCE_TIME rtStreamTime, HEVENT hEvent, DWORD_PTR *pdwAdviseCookie)
SystemClockAdviseEntry * pSingleShotAdvise
static BOOL SystemClockPostMessageToAdviseThread(SystemClockImpl *This, UINT iMsg)
struct SystemClockImpl SystemClockImpl
void WINAPI DeleteCriticalSection(PCRITICAL_SECTION)
REFERENCE_TIME rtBaseTime
static HRESULT WINAPI SystemClockImpl_QueryInterface(IReferenceClock *iface, REFIID riid, void **ppobj)
DWORD WINAPI MsgWaitForMultipleObjects(_In_ DWORD nCount, _In_reads_opt_(nCount) CONST HANDLE *pHandles, _In_ BOOL fWaitAll, _In_ DWORD dwMilliseconds, _In_ DWORD dwWakeMask)
#define THREAD_PRIORITY_TIME_CRITICAL
#define InterlockedDecrement
#define IReferenceClock_GetTime(p, a)
static SystemClockImpl * impl_from_IReferenceClock(IReferenceClock *iface)
#define InterlockedIncrement
BOOL WINAPI DECLSPEC_HOTPATCH ReleaseSemaphore(IN HANDLE hSemaphore, IN LONG lReleaseCount, IN LPLONG lpPreviousCount)
static HRESULT WINAPI SystemClockImpl_Unadvise(IReferenceClock *iface, DWORD_PTR dwAdviseCookie)
static __inline const char * wine_dbgstr_longlong(ULONGLONG ll)
BOOL WINAPI PeekMessageW(_Out_ LPMSG, _In_opt_ HWND, _In_ UINT, _In_ UINT, _In_ UINT)
REFERENCE_TIME rtIntervalTime
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
static ULONG WINAPI SystemClockImpl_AddRef(IReferenceClock *iface)
static void QUARTZ_InsertAviseEntryFromQueue(SystemClockImpl *This, SystemClockAdviseEntry *pEntry, SystemClockAdviseEntry **pQueue)
BOOL WINAPI PostThreadMessageW(_In_ DWORD, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
LPVOID WINAPI CoTaskMemAlloc(SIZE_T size)
#define IsEqualIID(riid1, riid2)
WINE_DEFAULT_DEBUG_CHANNEL(quartz)