国产一级一区二区_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久久夜色精品国产_欧美色网一区二区
自拍av一区二区三区| 99久久久久久| 亚洲成人av在线电影| 狠狠色综合日日| 欧美天堂亚洲电影院在线播放| 国产喂奶挤奶一区二区三区| 免费久久99精品国产| 欧美最新大片在线看 | 中文字幕一区二区三区四区不卡 | 精品成人a区在线观看| 久久精品国产精品亚洲综合| 欧美一级免费观看| 五月天一区二区三区| 欧美日韩你懂得| 综合分类小说区另类春色亚洲小说欧美| 九九**精品视频免费播放| 日韩一区二区不卡| 蜜臀va亚洲va欧美va天堂| 日韩欧美不卡在线观看视频| 精品一区二区三区香蕉蜜桃| 日韩精品在线看片z| 国产制服丝袜一区| 亚洲国产精品传媒在线观看| 成人午夜碰碰视频| 亚洲少妇屁股交4| 91精品办公室少妇高潮对白| 五月天一区二区三区| 日韩三级视频在线观看| 国产一区二区三区观看| 国产精品三级电影| 欧美日韩一级片网站| 久久99精品久久久久久国产越南| 久久久久久一二三区| 91年精品国产| 石原莉奈在线亚洲二区| 欧美一级精品在线| 成人精品小蝌蚪| 亚洲午夜精品17c| 精品电影一区二区三区| 91偷拍与自偷拍精品| 日韩激情一二三区| 26uuu精品一区二区在线观看| 国产91丝袜在线播放| 亚洲最大成人网4388xx| 精品久久99ma| 在线观看一区二区精品视频| 狠狠色2019综合网| 亚洲最大的成人av| 国产亚洲精品资源在线26u| 欧美在线观看一二区| 国产主播一区二区三区| 亚洲欧美日韩国产中文在线| 日韩精品中午字幕| 一本大道久久精品懂色aⅴ| 麻豆成人久久精品二区三区红| 国产精品天天看| 日韩一区二区在线观看视频 | 国产精品免费久久| 91精品国产日韩91久久久久久| 成人免费av资源| 免费在线观看一区| 一个色妞综合视频在线观看| 国产日韩欧美一区二区三区乱码| 欧美美女黄视频| 91丨porny丨户外露出| 国产一区二区三区四区在线观看| 亚洲一区二区五区| 亚洲日本成人在线观看| 国产色婷婷亚洲99精品小说| 在线91免费看| 欧美三片在线视频观看| 欧美天堂一区二区三区| 国产美女av一区二区三区| 婷婷丁香久久五月婷婷| 一区二区三区四区亚洲| 自拍偷自拍亚洲精品播放| 中文欧美字幕免费| 欧美成人精品二区三区99精品| 在线亚洲人成电影网站色www| 国产成人综合在线观看| 国产综合色在线视频区| 国内精品视频666| 蜜臂av日日欢夜夜爽一区| 日韩黄色小视频| 免费看欧美美女黄的网站| 午夜伦欧美伦电影理论片| 亚洲已满18点击进入久久| 亚洲欧洲成人自拍| 亚洲婷婷综合久久一本伊一区 | 国产精品66部| 国产成人免费视频一区| 国产激情一区二区三区四区| 国产精品影视天天线| 国产suv精品一区二区三区| 国产成人av一区二区三区在线 | 中文乱码免费一区二区| 国产网站一区二区| 国产精品女同一区二区三区| 国产日韩精品一区二区三区| 中文字幕亚洲精品在线观看 | 国产白丝网站精品污在线入口| 韩国欧美国产1区| 国产精品系列在线观看| 国产一区91精品张津瑜| 成人三级在线视频| 在线免费观看日本欧美| 欧美日本韩国一区| 欧美一区二区三区视频免费播放| 日韩精品中文字幕在线一区| 国产精品视频第一区| 亚洲欧美日韩精品久久久久| 日韩av电影免费观看高清完整版 | 亚洲精品一区二区精华| 国产精品网站在线| 午夜欧美2019年伦理| 久久av中文字幕片| 色综合久久精品| 日韩一级在线观看| 国产欧美日韩卡一| 一区二区三区四区在线播放| 日本不卡一区二区三区高清视频| 国产精品一区在线观看乱码 | 亚洲444eee在线观看| 国内欧美视频一区二区| 91亚洲国产成人精品一区二区三 | 成人综合在线网站| 欧美日韩在线精品一区二区三区激情| 99re这里只有精品视频首页| 91麻豆精品国产91| 国产精品丝袜91| 日韩福利电影在线| 成人av在线一区二区三区| 91成人免费网站| 久久精品夜色噜噜亚洲a∨| 日韩理论片在线| 久久99热99| 欧美性猛交xxxx乱大交退制版 | 奇米精品一区二区三区在线观看 | 亚洲欧洲日韩av| 日韩av在线播放中文字幕| 国产.精品.日韩.另类.中文.在线.播放 | 丝袜美腿亚洲综合| 成人一区二区三区中文字幕| 欧美伊人久久大香线蕉综合69 | 成人动漫一区二区三区| 91精品国产欧美一区二区成人| 欧美激情综合五月色丁香| 五月天亚洲婷婷| 99精品欧美一区| 2020国产精品| 日本不卡一区二区三区| 91视频免费观看| 久久久www成人免费毛片麻豆| 视频一区中文字幕| 欧美午夜电影在线播放| 国产精品不卡在线观看| 成人h精品动漫一区二区三区| 91麻豆精品国产自产在线观看一区| 国产精品免费人成网站| 国产精品自拍av| 精品国产一区二区三区忘忧草| 亚洲成人免费在线| 欧美日韩国产成人在线91| 欧美激情综合网| 国产成人精品亚洲777人妖 | 久久99国产精品久久99果冻传媒| 色综合 综合色| 中文字幕一区二区三区四区不卡| 成人黄色av电影| 中文字幕国产一区二区| 国产成人一区在线| 精品日韩av一区二区| 蜜桃av一区二区在线观看| 欧美日韩www| 久久精品国产亚洲高清剧情介绍 | 一区二区日韩电影| 欧美日韩精品一区二区| 亚洲国产综合人成综合网站| 欧美午夜精品久久久久久超碰| 亚洲激情欧美激情| 欧洲av在线精品| 日韩av电影一区| 精品人伦一区二区色婷婷| 精品一区二区三区在线观看 | 免费高清在线视频一区·| 欧美一区二区三区免费视频| 日韩成人一级大片| 国产欧美视频在线观看| 在线免费av一区| 首页国产丝袜综合| 欧美一卡二卡三卡| 国产福利91精品一区二区三区| 欧美国产激情一区二区三区蜜月| 在线看国产一区二区| 理论电影国产精品| 久久夜色精品国产噜噜av| 色播五月激情综合网| 麻豆一区二区三| 中文字幕乱码一区二区免费| 欧美日韩一区视频|