国产一级一区二区_segui88久久综合9999_97久久夜色精品国产_欧美色网一区二区

掃一掃
關(guān)注微信公眾號(hào)

在Linux上處理共享對(duì)象的同步事件(1)
2007-07-05   

在面向?qū)ο蟮南到y(tǒng)中,當(dāng)一個(gè)對(duì)象接收到一條消息時(shí),可能會(huì)發(fā)生一系列的事件。通常,這些事件是以 同步(synchronous) 模式處理的:調(diào)用進(jìn)程或向這個(gè)對(duì)象發(fā)送消息的線程在發(fā)送消息調(diào)用完成之前都會(huì)接收并處理一系列事件。然而,如果產(chǎn)生這些事件的對(duì)象是由多個(gè)進(jìn)程進(jìn)行共享并且保存在共享內(nèi)存中時(shí),情況就稍微有些不同了。
本文將使用兩種 C++ 設(shè)計(jì)模式來詳細(xì)介紹這種情況,并使用一些樣例代碼來展示這種解決方案(這些樣例代碼可以從本文 下載 一節(jié)中獲得):
我們將簡(jiǎn)要介紹不使用共享內(nèi)存的樣例代碼。
使用第一種設(shè)計(jì)模式來修改這些代碼,讓其使用共享內(nèi)存。
然后闡述如何使用第二種設(shè)計(jì)模式來實(shí)現(xiàn)進(jìn)程間通信(IPC)。 您可以在任何機(jī)器體系架構(gòu)、操作系統(tǒng)和編譯器上應(yīng)用這兩種設(shè)計(jì)模式中的概念。對(duì)于本文來說,我們使用的是 RedHat Linux 7.1 for 32-bit x86 Intel? 體系架構(gòu)的發(fā)行版;使用 GNU C++ compiler version 3.2.3 編譯器及其相關(guān)工具來編譯并測(cè)試樣例程序。
不使用共享內(nèi)存
下面讓我們開始介紹這個(gè)樣例程序,首先是不使用共享內(nèi)存的程序:
清單 1. common.h<

#ifndef __COMMON_H__
#define __COMMON_H__
class IObjectWithEvents
{
public:class IEventSink{public:virtual void OnEvent(pid_t pid, const char * msg) = 0;};
static IObjectWithEvents * getInstance();
virtual bool AddEventHandler(IEventSink * pEI) = 0;virtual void SendMessage() = 0;
};
#endif //__COMMON_H__
接口類 IObjectWithEvents 包含了一個(gè)內(nèi)嵌的接口類 IEventSink,它定義了 OnEvent() 方法。這個(gè)事件處理程序接收一個(gè)發(fā)送者的 id 和一個(gè)字符串消息。getInstance() 方法返回對(duì)共享內(nèi)存中對(duì)象的引用,AddEventHandler() 注冊(cè)一個(gè)事件處理程序,SendMessage() 向這個(gè)對(duì)象發(fā)送一條消息。由于不需要引用共享內(nèi)存,所以可以像清單 2 中那樣來使用 IObjectWithEvents:
清單 2. shm-client1.cpp<
#include 
#include 
#include 
#include "common.h"
#define HERE __FILE__ << ":" << __LINE__ << " "
using namespace std;
class EventSink : public IObjectWithEvents::IEventSink
{
public:void OnEvent(pid_t pid, const char * msg){cout << HERE << "Message from pid(" << pid << ")\t : " << msg << endl;}
};
int main()
{IObjectWithEvents * powe = IObjectWithEvents::getInstance();
EventSink sink;powe->AddEventHandler(&sink);
powe->SendMessage();return 0;
}
類 EventSink 提供了這個(gè)事件處理程序的實(shí)現(xiàn)。主函數(shù)中給出了用于發(fā)送消息和處理事件的標(biāo)準(zhǔn)序列。
ObjectWithEvents 的典型實(shí)現(xiàn)如清單 3、4 所示:
清單 3. ObjectWithEvents.h
#include "common.h"
class ObjectWithEvents : public IObjectWithEvents
{
public:// We assume singleton design pattern for illustrationstatic ObjectWithEvents * ms_pObjectWithEvents;
ObjectWithEvents();
//the implementation for IObjectWithEventsvoid FireEvent();virtual bool AddEventHandler(IEventSink * pEI);virtual void SendMessage();
//Collection for maintaining eventsenum { MAX_EVENT_HANDLERS = 16, };long m_npEI;IEventSink * m_apEI[MAX_EVENT_HANDLERS];pid_t m_alPID[MAX_EVENT_HANDLERS];
};
清單 4. ObjectWithEvents.cpp
#include 
#include 
#include 
#include 
#include 
#include "ObjectWithEvents.h"
using namespace std;
ObjectWithEvents * ObjectWithEvents::ms_pObjectWithEvents = NULL;
IObjectWithEvents * IObjectWithEvents::getInstance()
{// the following commented code is for illustration only./*if (NULL == ObjectWithEvents::ms_pObjectWithEvents){ObjectWithEvents::ms_pObjectWithEvents = new ObjectWithEvents();}*/
return ObjectWithEvents::ms_pObjectWithEvents;
}
ObjectWithEvents::ObjectWithEvents() : m_npEI(0)
{
}
void ObjectWithEvents::FireEvent()
{// iterate through the collectionfor (long i = 0; i < m_npEI; i++){//Recheck for NULLif (0 != m_apEI[i]){// Fire the eventm_apEI[i]->OnEvent(m_alPID[i], "");}}
return;
}
bool ObjectWithEvents::AddEventHandler(IEventSink * pEI)
{// NULL checkif (NULL == pEI){return false;}
// check if there is space for this event handlerif (MAX_EVENT_HANDLERS == m_npEI){return false;}
// Add this event handler to the collectionm_alPID[m_npEI] = getpid();m_apEI[m_npEI++] = pEI;
return true;
}
void ObjectWithEvents::SendMessage()
{//Some processing//And then fire the event
FireEvent();
return;
}
清單 4 中的代碼可以使用下面的腳本來編譯:
g++ -g -o shm_client shm_client1.cpp ObjectWithEvents.cpp
在運(yùn)行 shm_client 時(shí),應(yīng)該可以看到下面的輸出:
$ ./shm_client shm_client1.cpp:16 Message from pid(3920) :
使用共享內(nèi)存:沒有事件緩存
現(xiàn)在,為了在共享內(nèi)存中對(duì) ObjectWithEvents 進(jìn)行實(shí)例化,我們需要修改 ObjectWithEvents 的實(shí)現(xiàn)。

共3頁: 1 [2] [3] 下一頁

熱詞搜索:

上一篇:Linux下恢復(fù)硬盤分區(qū)數(shù)據(jù)
下一篇:如何設(shè)定執(zhí)行Java的Linux安全環(huán)境(1)

分享到: 收藏
国产一级一区二区_segui88久久综合9999_97久久夜色精品国产_欧美色网一区二区
国产一区二区女| 波波电影院一区二区三区| 波多野结衣亚洲一区| 国产精品乱人伦一区二区| 不卡欧美aaaaa| 亚洲一区二区三区国产| 在线成人小视频| 国产精品原创巨作av| 国产精品三级av| 色成年激情久久综合| 午夜影院久久久| 精品盗摄一区二区三区| 豆国产96在线|亚洲| 午夜在线成人av| 亚洲人成亚洲人成在线观看图片| 日韩国产欧美三级| 亚洲一卡二卡三卡四卡无卡久久| 99re在线视频这里只有精品| 丁香桃色午夜亚洲一区二区三区| 成人综合婷婷国产精品久久蜜臀| 日韩精品电影在线| 91热门视频在线观看| 亚洲最大成人网4388xx| 日韩视频一区二区三区在线播放| 久久se精品一区二区| 综合激情网...| 欧美日韩精品二区第二页| 国产毛片一区二区| 伊人婷婷欧美激情| 2017欧美狠狠色| 欧美日韩国产在线观看| 成人免费视频caoporn| 午夜精品在线看| 久久久99久久| 欧美精品久久一区| 99精品久久久久久| 国产综合色精品一区二区三区| 亚洲男人的天堂av| 久久久综合激的五月天| 91福利国产精品| 国产福利不卡视频| 日韩在线一区二区三区| 亚洲综合一区在线| 国产婷婷精品av在线| 欧美一区二区三区四区五区| 91在线小视频| 不卡免费追剧大全电视剧网站| 欧美精品欧美精品系列| 91国偷自产一区二区三区成为亚洲经典| 久久国内精品自在自线400部| 一区二区三区在线观看国产| 国产精品五月天| 91精品国产一区二区三区香蕉| 色综合一个色综合亚洲| 99视频精品免费视频| 高清av一区二区| 国产在线看一区| 国产在线观看免费一区| 国产一区二区三区香蕉| 日本特黄久久久高潮| 婷婷综合另类小说色区| 亚洲永久精品大片| 亚洲h动漫在线| 偷窥国产亚洲免费视频| 天天影视网天天综合色在线播放| 午夜精品久久久久久久99水蜜桃| 亚洲综合一区二区| 亚洲成a人片在线不卡一二三区| 亚洲男同性视频| 亚洲国产成人av网| 亚洲国产aⅴ成人精品无吗| 亚洲午夜久久久久久久久电影网| 一区二区三区四区高清精品免费观看| 亚洲女同女同女同女同女同69| 亚洲日本丝袜连裤袜办公室| 一区二区在线看| 亚洲国产综合91精品麻豆| 亚洲激情欧美激情| 日韩电影在线免费| 美女www一区二区| 国产一区二区久久| jlzzjlzz亚洲日本少妇| 在线观看亚洲专区| 欧美一区二区三区在线观看| 久久久久久久综合日本| 国产精品的网站| 亚洲自拍偷拍图区| 韩国av一区二区三区| 99久久久久免费精品国产| 欧美日韩午夜精品| 久久日一线二线三线suv| 国产精品久99| 同产精品九九九| 成人爱爱电影网址| 日韩欧美一区二区视频| 亚洲欧洲制服丝袜| 日韩成人午夜电影| av亚洲产国偷v产偷v自拍| 欧美视频一区二| 国产欧美一区二区精品性色超碰| 亚洲精品成人悠悠色影视| 美女久久久精品| 欧美性xxxxx极品少妇| 欧美激情综合五月色丁香| 肉色丝袜一区二区| 一本久久综合亚洲鲁鲁五月天| 欧美刺激脚交jootjob| 亚洲国产视频一区二区| 9l国产精品久久久久麻豆| 亚洲精品在线三区| 亚洲成年人网站在线观看| 日本韩国精品在线| 国产欧美综合在线观看第十页| 午夜久久久久久久久 | 欧美三级蜜桃2在线观看| 久久这里只有精品6| 美日韩一区二区三区| 欧美日韩午夜在线| 亚洲国产综合色| 在线视频一区二区免费| 国产精品亲子伦对白| 国产盗摄女厕一区二区三区| 精品少妇一区二区三区| 天堂一区二区在线| 欧美日韩另类一区| 亚洲bdsm女犯bdsm网站| 在线观看日韩国产| 亚洲大型综合色站| 欧美精品第1页| 日本女人一区二区三区| 欧美人与性动xxxx| 日本欧美在线观看| 精品久久久久久亚洲综合网| 美女视频黄a大片欧美| 精品国产乱码久久久久久影片| 另类小说视频一区二区| 日韩欧美亚洲另类制服综合在线| 首页欧美精品中文字幕| 5566中文字幕一区二区电影| 免费人成黄页网站在线一区二区 | 日韩欧美视频一区| 久久99精品久久久久久动态图| 日韩亚洲欧美在线观看| 黄一区二区三区| 久久精品一区二区三区四区| 国产suv精品一区二区6| 国产精品久久久久毛片软件| 99riav久久精品riav| 亚洲成av人影院在线观看网| 欧美电影免费观看完整版| 不卡免费追剧大全电视剧网站| 国产精品护士白丝一区av| 一本色道综合亚洲| 免费亚洲电影在线| 日本一区二区成人在线| 色综合久久天天| 亚洲成人免费在线| 久久噜噜亚洲综合| 91成人在线观看喷潮| 免费久久精品视频| 国产精品不卡一区| 欧美一卡2卡三卡4卡5免费| 国产**成人网毛片九色| 樱花草国产18久久久久| 精品久久久久久久久久久久久久久| 成人深夜视频在线观看| 偷拍一区二区三区| 国产精品美女久久久久久久久| 欧美亚洲图片小说| 国产91精品一区二区麻豆网站 | www.亚洲色图.com| 亚洲大片在线观看| 国产精品美女久久久久久久久 | 一本色道亚洲精品aⅴ| 国产在线国偷精品产拍免费yy| 亚洲天天做日日做天天谢日日欢 | 精品中文字幕一区二区| 亚洲乱码国产乱码精品精可以看| 91精品国产全国免费观看| av一区二区三区在线| 久久精品二区亚洲w码| 夜夜操天天操亚洲| 国产欧美一区二区三区鸳鸯浴 | 久久99久久99| 69堂亚洲精品首页| 国产偷国产偷亚洲高清人白洁| 精品国内片67194| 日本韩国视频一区二区| 亚洲制服丝袜一区| 亚洲成人自拍偷拍| 亚洲激情六月丁香| 中国av一区二区三区| 欧美情侣在线播放| 成人黄色a**站在线观看| 日韩1区2区3区| 亚洲永久精品大片| 亚洲欧美日韩中文字幕一区二区三区 | 欧美白人最猛性xxxxx69交| 亚洲一区二区三区中文字幕在线| 亚洲天堂久久久久久久|