72 lines
1.2 KiB
C++
72 lines
1.2 KiB
C++
#include "precomp.h"
|
|
#include "list.h"
|
|
|
|
|
|
CRegisteredEventList g_RegisteredEventList;
|
|
|
|
VOID
|
|
NhInitializeCallBack(VOID)
|
|
{
|
|
return;
|
|
}
|
|
|
|
//
|
|
//
|
|
//
|
|
VOID
|
|
NhUnRegisterEvent(HANDLE WaitHandle)
|
|
{
|
|
HANDLE hEvent;
|
|
UnregisterWaitEx(WaitHandle,INVALID_HANDLE_VALUE);
|
|
g_RegisteredEventList.Remove(WaitHandle,&hEvent);
|
|
CloseHandle(hEvent);
|
|
return;
|
|
}
|
|
|
|
|
|
//
|
|
//
|
|
//
|
|
VOID
|
|
NhEventCallBackFunction(
|
|
PVOID Context,
|
|
BOOLEAN TimerOrWait
|
|
)
|
|
{
|
|
HANDLE hEvent = (HANDLE)Context;
|
|
HANDLE WaitHandle;
|
|
VOID *Context1;
|
|
VOID *Context2;
|
|
EVENT_CALLBACK CallBack;
|
|
g_RegisteredEventList.Remove(&WaitHandle,hEvent,&CallBack,&Context1,&Context2);
|
|
CloseHandle(hEvent);
|
|
(*CallBack)(TimerOrWait,Context1,Context2);
|
|
return;
|
|
}
|
|
|
|
|
|
//
|
|
//
|
|
//
|
|
HANDLE
|
|
NhRegisterEvent(
|
|
HANDLE hEvent,
|
|
EVENT_CALLBACK CallBack,
|
|
VOID* Context,
|
|
VOID* Context2,
|
|
ULONG TimeOut
|
|
)
|
|
{
|
|
VOID *nContext;
|
|
HANDLE WaitHandle = NULL;
|
|
BOOL Err;
|
|
Err = RegisterWaitForSingleObject(&WaitHandle,hEvent,NhEventCallBackFunction,(PVOID)hEvent,TimeOut,
|
|
WT_EXECUTEDEFAULT | WT_EXECUTEONLYONCE);
|
|
if (Err)
|
|
g_RegisteredEventList.Insert(WaitHandle,hEvent,CallBack,Context,Context2);
|
|
else
|
|
WaitHandle = NULL;
|
|
|
|
return WaitHandle;
|
|
}
|