eventcore

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

相關詞條

熱門詞條

聯絡我們