开源的 EventCore 库 源代码下载地址, 大家来捧个场

yaosan 2008-04-29 11:10:13
源代码下载地址 http://event.googlecode.com/files/event.rar


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;
}


...全文
75 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
gogovista 2008-04-30
  • 打赏
  • 举报
回复
很勤奋.........
在08年的时候还在写这些
虽然09年的时候我们就会有一个语言及的并发库........
yaosan 2008-04-30
  • 打赏
  • 举报
回复
好冷清啊
yaosan 2008-04-30
  • 打赏
  • 举报
回复
VC 2005

我等把工程用vc6 重新一个
eastsir 2008-04-30
  • 打赏
  • 举报
回复
你用的什么开发工具?不是VC?
yaosan 2008-04-29
  • 打赏
  • 举报
回复
详细见:
http://blog.csdn.net/yaosan/archive/2008/04/29/2344926.aspx
以后会经常更新 EventCore 使用帮助

1,660

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 非技术类
社区管理员
  • 非技术类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧