分享
 
 
 

eventcore

王朝百科·作者佚名  2010-04-05
窄屏简体版  字體: |||超大  

EventCore 概述

摘要:本文主要讲述EventCore的主要功能,实现原理,和使用方法

本页内容

什么是EventCore

EventCore适用于

EventCore的原理

EventCore的使用方法

EventCore与C++

在C++中使用EventCore

什么是EventCore

EventCore是模拟windows消息机制,实现线程同步、线程通信、进程通信、事件驱动的一个开源项目。

EventCore的最新源代码,可以在http://event.googlecode.com 得到。

EventCore适用于

我们知道Windows窗口是用消息循环来实现事件驱动、窗口间通信、线程同步等功能的。我们在编写多线程无窗口程序(控制台程序,系统服务)时,死锁成为多线程程序的常见bug,线程同步、线程通信成了一个难题,为了解决这些问题,如果在编写多线程无窗口程序(控制台程序,系统服务)时,如果引入Windows消息循环机制,这些难题就迎刃而解了,但是windows只为我们提供了PostThreadMessage这样一个可用于无窗口程序的消息通信函数,因此开发一个与窗口无关,而能实现Windows消息循环机制一样功能的类库是很有必要的,EventCore就是为了这个目的而存在的。

EventCore的原理

EventCore内部有一个全局的线程列队,一个全局的句柄列队,再为需要事件驱动的线程建一个全局的事件列队,为了让所有进程都能共享访问队列,每个队列都是一个windows内存映射文件

EventCore API 函数表

序号 EventCore函数 相似功能的Windows函数

1 CreateEventEx CreateWindow

2 DestroyEvent DestroyWindow

3 GetEvent GetMessage

4 PeekEvent PeekMessage

5 DispatchEvent DispatchMessage

6 ReplyEvent ReplyMessage

7 InSendEvent InSendMessage

8 PostEvent PostMessage

9 SendEvent SendMessage

10 SendEventCallback SendMessageCallback

11 SendEventTimeout SendMessageTimeout

12 SendNotifyEvent SendNotifyMessage

13 PostThreadEvent PostThreadMessage

14 PostQuitEvent PostQuitMessage

15 PostCopyDataEvent PostMessage[WM_CPOYDATA]

16 FindEvent FindWindow

17 EnumEvent EnumWindows

18 GetEventName GetWindowText

19 SetEventName SetWindowText

20 GetEventProc GetWindowLongPtr[GWLP_WNDPROC]

21 SetEventProc SetWindowLongPtr[GWLP_WNDPROC]

22 IsEvent IsWindow

23 FreeThreadQueue

24 GetEventData

25 SetEventData

EventCore的使用方法

Eventcore的使用方法和Windows消息机制几乎一样,请看下面的代码

int CALLBACK EventProc(LPEVENT origEvt)

{

switch(origEvt ->EvtID)

{

case EVT_CREATE:

{

//调用EVT_CreateEvent 时收到的事件

}

break;

case EVT_DESTROY:

{

//调用EVT_DestroyEvent 时收到的事件

}

return 1;

}

}

int _tmain(int argc, _TCHAR* argv[])

{

HEVENT hEvent=CreateEventEx(_T(“Test”),EventProc,NULL);

EVT evt;

while(GetEvent(&evt))

{

DispatchEvent(&evt);

}

return evt.wParam;

}

EventCore与C++

EventCore本身就是用C++开发的,开发EventCore的目的,也就是为了解决多线程C++程序通信,数据传递,函数调用,防死锁,线程同步等问题的,因为在C++程序中使用EventCore是非常方便的。

在C++中使用EventCore

class CEventSamples :

public EventCore::CEventAPI<CEventSamples> {

public:

CEventSamples(void)

{

}

CEventSamples(LPCTSTR szclass)

:EventCore::CEventAPI<CEventSamples>(szclass)

{

}

~CEventSamples(void)

{

}

BEGIN_EVT_MAP(CEventSamples)

EVENT_HANDLER(EVT_CREATE,OnCreate)

EVENT_HANDLER(EVT_DESTROY,OnDestroy)

END_EVT_MAP()

public:

LRESULT OnCreate(LPEVT origEvt, BOOL& bHandled)

{

printf("OnCreate ");

return 1;

}

LRESULT OnDestroy(LPEVT origEvt, BOOL& bHandled)

{

printf("OnDestory ");

return 1;

}

};

int _tmain(int argc, _TCHAR* argv[])

{

CEventSamples Samples(_T("default"));

::PostEvent(Samples.GetEvent(),EVT_USER+1,1,100);

getchar();

return 0;

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有