王朝百科
分享
 
 
 

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;

}

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
如何用java替换看不见的字符比如零宽空格&#8203;十六进制U+200B
 干货   2023-09-10
网页字号不能单数吗,网页字体大小为什么一般都是偶数
 干货   2023-09-06
java.lang.ArrayIndexOutOfBoundsException: 4096
 干货   2023-09-06
Noto Sans CJK SC字体下载地址
 干货   2023-08-30
window.navigator和navigator的区别是什么?
 干货   2023-08-23
js获取referer、useragent、浏览器语言
 干货   2023-08-23
oscache遇到404时会不会缓存?
 干货   2023-08-23
linux下用rm -rf *删除大量文件太慢怎么解决?
 干货   2023-08-08
刀郎新歌破世界纪录!
 娱乐   2023-08-01
js实现放大缩小页面
 干货   2023-07-31
生成式人工智能服务管理暂行办法
 百态   2023-07-31
英语学习:过去完成时The Past Perfect Tense举例说明
 干货   2023-07-31
Mysql常用sql命令语句整理
 干货   2023-07-30
科学家复活了46000年前的虫子
 探索   2023-07-29
英语学习:过去进行时The Past Continuous Tense举例说明
 干货   2023-07-28
meta name="applicable-device"告知页面适合哪种终端设备:PC端、移动端还是自适应
 干货   2023-07-28
只用css如何实现打字机特效?
 百态   2023-07-15
css怎么实现上下滚动
 干货   2023-06-28
canvas怎么画一个三角形?
 干货   2023-06-28
canvas怎么画一个椭圆形?
 干货   2023-06-28
canvas怎么画一个圆形?
 干货   2023-06-28
canvas怎么画一个正方形?
 干货   2023-06-28
中国河南省郑州市金水区蜘蛛爬虫ip大全
 干货   2023-06-22
javascript简易动态时间代码
 干货   2023-06-20
感谢员工的付出和激励的话怎么说?
 干货   2023-06-18
 
>>返回首页<<
 
 
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有