📄 myevent_win32.c
字号:
/*
*
*myevent_win32.c 条件(cond)/事件(event) lin shao chuan
*
*/
#include "myevent.h"
#include <assert.h>
#include <windows.h>
#include "mylog.h"
typedef struct __myevent_t_
{
HMYMEMPOOL hm;
HANDLE hevt;
}myevent_t;
/*
*
*创建事件/条件
*
*/
HMYEVENT MyEventRealConstruct(HMYMEMPOOL hm, int bNotAutoReset)
{
myevent_t * me = MyMemPoolMalloc(hm, sizeof(*me));
if(NULL == me)
return NULL;
me->hevt = CreateEvent(NULL, bNotAutoReset, FALSE, NULL);
me->hm = hm;
if(NULL == me->hevt)
{
LOG_WARN(("fail create event"));
MyMemPoolFree(hm, me);
return NULL;
}
return (HMYEVENT)me;
}
/*
*
*销毁事件/条件
*
*/
void MyEventDestruct(HMYEVENT he)
{
myevent_t * me = (myevent_t *)he;
if(NULL == me)
return;
assert(me->hevt);
if(WaitForSingleObject(me->hevt, 0) == WAIT_TIMEOUT)
SetEvent(me->hevt);
CloseHandle(me->hevt);
MyMemPoolFree(me->hm, me);
}
/*
*
*把事件设置成signaled状态
*
*/
void MyEventSetSignaled(HMYEVENT he)
{
myevent_t * me = (myevent_t *)he;
if(NULL == me || NULL == me->hevt)
return;
SetEvent(me->hevt);
}
/*
*
*把事件设置成非signaled状态
*
*/
void MyEventSetNoSignaled(HMYEVENT he)
{
myevent_t * me = (myevent_t *)he;
if(NULL == me || NULL == me->hevt)
return;
ResetEvent(me->hevt);
}
/*
*
* 等待事件发生,
*
*param millsecond:单位毫秒, -1表示无限等待,直至事件发生
*/
int MyEventWait(HMYEVENT he, struct timeval * timeout)
{
DWORD ret = 0;
myevent_t * me = (myevent_t *)he;
if(NULL == me || NULL == me->hevt)
return -1;
if(NULL == timeout)
ret = WaitForSingleObject(me->hevt, INFINITE);
else
ret = WaitForSingleObject(me->hevt, timeout->tv_sec * 1000 + timeout->tv_usec/1000);
if(WAIT_OBJECT_0 == ret)
return 0;
else
return -1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -