当前位置: 首页 > 编程日记 > 正文

利用Event和MapFile进程共享信息

工作过程:


进程一, 建立映射文件,填写数据,并发出Event的信号;


进程二,打开映射文件,收到Event的信号时读取数据.

None.gif#include <windows.h>
None.gif#include 
<string.h>
None.gif#include 
<iostream>
None.gif
using namespace std;
None.gif
None.gif
#define FILE_SIZE 1024
None.gif
None.gif
static HANDLE hMapFile;
None.gif
static LPVOID lpMapAddress;
None.gif
static LPCTSTR g_szEventName="EventName";
None.gif
ExpandedBlockStart.gifContractedBlock.gif
void Write(char* data)dot.gif{
ExpandedSubBlockStart.gifContractedSubBlock.gif    
if(lpMapAddress!=NULL)dot.gif{
InBlock.gif        memset(lpMapAddress,
0,FILE_SIZE);
InBlock.gif        sprintf((
char*)lpMapAddress,"%s",data);
ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}

None.gif
ExpandedBlockStart.gifContractedBlock.gif
void Read()dot.gif{
ExpandedSubBlockStart.gifContractedSubBlock.gif    
if(lpMapAddress!=NULL)dot.gif{
InBlock.gif        printf(
"%s\n",lpMapAddress);
ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}

None.gif
None.gif
ExpandedBlockStart.gifContractedBlock.gif
void Process1()dot.gif{//写数据
InBlock.gif
hMapFile = CreateFileMapping(
InBlock.gif    INVALID_HANDLE_VALUE,               
// Current file handle. 
InBlock.gif
    NULL,                              // Default security. 
InBlock.gif
    PAGE_READWRITE,                    // Read/write permission. 
InBlock.gif
    0,                                 // Max. object size. 
InBlock.gif
    FILE_SIZE,                         // Size of hFile. 
InBlock.gif
    "MyFileMappingObject");            // Name of mapping object. 
InBlock.gif
 
InBlock.gif
if (hMapFile == NULL) 
ExpandedSubBlockStart.gifContractedSubBlock.gif
dot.gif
InBlock.gif    printf(
"Could not create file-mapping object."); 
InBlock.gif    
return ;
ExpandedSubBlockEnd.gif}
 
InBlock.gif
InBlock.gif
//
InBlock.gif
lpMapAddress = MapViewOfFile(hMapFile, // Handle to mapping object. 
InBlock.gif
    FILE_MAP_ALL_ACCESS,               // Read/write permission 
InBlock.gif
    0,                                 // Max. object size. 
InBlock.gif
    0,                                 // Size of hFile. 
InBlock.gif
    FILE_SIZE);                                // Map entire file. 
InBlock.gif
 
InBlock.gif
if (lpMapAddress == NULL) 
ExpandedSubBlockStart.gifContractedSubBlock.gif
dot.gif
InBlock.gif    printf(
"Could not map view of file."); 
InBlock.gif    
return ;
ExpandedSubBlockEnd.gif}
 
InBlock.gif::Sleep(
10000);
InBlock.gif
//Write data
InBlock.gif
HANDLE hEvent=::OpenEvent(
InBlock.gif        EVENT_MODIFY_STATE,
InBlock.gif        FALSE,
InBlock.gif        g_szEventName);
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif
while(hEvent!=NULL)dot.gif{
InBlock.gif        scanf(
"%s",lpMapAddress);
InBlock.gif        ::SetEvent(hEvent);
ExpandedSubBlockEnd.gif}

InBlock.gif::CloseHandle(hEvent);
InBlock.gifhEvent
=INVALID_HANDLE_VALUE;
InBlock.gif
ExpandedBlockEnd.gif}

None.gif
ExpandedBlockStart.gifContractedBlock.gif
void Process2()dot.gif{//读数据
InBlock.gif
hMapFile = OpenFileMapping(FILE_MAP_ALL_ACCESS, // Read/write permission. 
InBlock.gif
    FALSE,                             // Do not inherit the name
InBlock.gif
    "MyFileMappingObject");            // of the mapping object. 
InBlock.gif
 
InBlock.gif
if (hMapFile == NULL) 
ExpandedSubBlockStart.gifContractedSubBlock.gif
dot.gif
InBlock.gif    printf(
"Could not open file-mapping object.\n"); 
InBlock.gif    
return;
ExpandedSubBlockEnd.gif}
 
InBlock.gif 
InBlock.giflpMapAddress 
= MapViewOfFile(hMapFile, // Handle to mapping object. 
InBlock.gif
    FILE_MAP_ALL_ACCESS,               // Read/write permission. 
InBlock.gif
    0,                                 // Max. object size. 
InBlock.gif
    0,                                    // Size of hFile. 
InBlock.gif
    FILE_SIZE);                                // Map entire file. 
InBlock.gif
 
InBlock.gif
if (lpMapAddress == NULL) 
ExpandedSubBlockStart.gifContractedSubBlock.gif
dot.gif
InBlock.gif    printf(
"Could not map view of file.\n"); 
InBlock.gif    
return;
ExpandedSubBlockEnd.gif}
 
InBlock.gif
InBlock.gif
//Wait for data
InBlock.gif
HANDLE hEvent=::CreateEvent(
InBlock.gif        NULL,
InBlock.gif        TRUE,
InBlock.gif        FALSE,
InBlock.gif        g_szEventName);
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif
while(hEvent!=NULL)dot.gif{
InBlock.gif        ::WaitForSingleObject(hEvent,INFINITE);
InBlock.gif        ::ResetEvent(hEvent);
InBlock.gif        ::Read();
ExpandedSubBlockEnd.gif    }

InBlock.gif::CloseHandle(hEvent);
InBlock.gifhEvent
=INVALID_HANDLE_VALUE;
ExpandedBlockEnd.gif}

None.gif
ExpandedBlockStart.gifContractedBlock.gif
void main()dot.gif{
InBlock.gif    
int flag;
InBlock.gif    cin
>>flag;
ExpandedSubBlockStart.gifContractedSubBlock.gif    
if(flag==1)dot.gif{
InBlock.gif        Process1();
ExpandedSubBlockEnd.gif    }

ExpandedSubBlockStart.gifContractedSubBlock.gif    
else if(flag==2)dot.gif{
InBlock.gif        Process2();
ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}

转载于:https://www.cnblogs.com/thomas/archive/2005/04/03/131303.html

相关文章:

算法基础知识科普:8大搜索算法之二叉搜索树(中)

昨天图文介绍了二叉搜索树的基本概念&#xff0c;本篇图文介绍二叉搜索树的具体实现。既然二叉搜索树是二叉树的特殊应用&#xff0c;所以我们首先封装二叉树的结点&#xff0c;即数据-左子树-右子树&#xff0c;然后实现ISymbolTalbe接口中的方法&#xff0c;我们知道二叉搜索…

PropertiesFactoryBean PropertyPlaceholderConfigurer 区别

为什么80%的码农都做不了架构师&#xff1f;>>> 1.PropertiesFactoryBean is a FactoryBean implementation which reads a properties file and exposes that as an Properties object in the applicationcontext. 加载配置文件后&#xff0c;可以在代码中通过注…

MySQL索引背后的数据结构及算法原理【转】

http://blog.codinglabs.org/articles/theory-of-mysql-index.htmlMySQL索引背后的数据结构及算法原理【转】摘要本文以MySQL数据库为研究对象&#xff0c;讨论与数据库索引相关的一些话题。特别需要说明的是&#xff0c;MySQL支持诸多存储引擎&#xff0c;而各种存储引擎对索引…

各种播放器代码

各种播放器代码1.avi格式代码片断如下&#xff1a;<object id"video"width"400"height"200"border"0"classid"clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA"><param name"ShowDisplay"value"0"…

算法基础知识科普:8大搜索算法之二叉搜索树(下)

由于微信发代码以及数学符号很吃力&#xff0c;所以我们做知识科普只能利用图片来做&#xff0c;本算法代码较多&#xff0c;所以分为三个部分来介绍。本篇把剩余的部分补齐。当然二叉搜索树也有自己的缺陷&#xff0c;即构造的二叉树跟数据的初始状态以及删除的方法有很大的关…

SpringMvc4中获取request、response对象的方法

springMVC4中获取request和response对象有以下两种简单易用的方法&#xff1a; 1、在control层获取 在control层中获取HttpServletRequest和HttpServletResponse对象有以下两种简单方式&#xff1a; 1&#xff09;通过方法参数直接在action类中获取 Controller class Action{ R…

JAVA增删改查XML文件

2019独角兽企业重金招聘Python工程师标准>>> 最近总是需要进行xml的相关操作。 不免的要进行xml的读取修改等&#xff0c;于是上网搜索&#xff0c;加上自己的小改动&#xff0c;整合了下xml的常用操作。 读取XML配置文件 首先我们需要通过DocumentBuilderFactory获…

测试一下,你能小学毕业吗?

昨天在群里大家讨论了上面那道小学六年级的五星题&#xff0c;不知道有没有同学能够不用三角函数&#xff0c;不用积分做出来的&#xff1f;先别往后看&#xff0c;测试一下吧&#xff01;看看是不是要跟小编一起重新背起小书包返回小学&#xff0c;重新学习了。 现在小学生的…

This is A PostXing Test

Test 一下下 试看看~~~ ABC试一下代码...1 public class PostApplicationExitActivationProcess2 {3 /// <summary>4 /// The main entry point for the application.5 /// </summary>6 [STAThread]7 static void Main( string[] args) 8 {9 if (…

缓存穿透、并发和失效的解决方案

我们在用缓存的时候&#xff0c;不管是Redis或者Memcached&#xff0c;基本上会通用遇到以下三个问题&#xff1a; 缓存穿透 缓存并发 缓存失效 缓存穿透 注&#xff1a;上面三个图会有什么问题呢&#xff1f; 我们在项目中使用缓存通常都是先检查缓存中是否存在&#xff0c;…

CentOS 7 命令

Centos 7 目录说明 / / 是根目录。 /bin 软连接到 /usr/bin。可以理解/bin 是 /usr/bin 的快捷方式。 /lib 软连接到 /usr/lib。 /lib64 软连接到 /usr/lib64。 /sbin 软连接到 /usr/sbin。 /usr软件安装位置 /usr/bin 为系统命令所在目录。 /usr/local 为安装程序所在目录。 /…

算法基础知识科普:8大搜索算法之AVL树(上)

前段时间介绍了二叉搜索树&#xff08;BST&#xff09;&#xff0c;我们知道这种搜索结构存在的弊端是对输入序列存在强依赖&#xff0c;若输入序列基本有序&#xff0c;则BST近似退化为链表。这样就会大大降低搜索的效率。AVL树以及Red-Black树就是为了解决这个问题&#xff0…

GARFIELD@04-09-2005

a technical facto 转载于:https://www.cnblogs.com/rexhost/archive/2005/04/09/134701.html

Vue.js学习系列(四十二)-- Vue.js组件

2019独角兽企业重金招聘Python工程师标准>>> 组件&#xff08;Component&#xff09;是Vue.js最强大的功能之一。组件可以扩展HTML元素&#xff0c;封装可重用的代码。组件系统让我们可以用独立可复用的小组件来构建大型应用&#xff0c;几乎任 意类型的应用的界面都…

java sqlite使用小记

2019独角兽企业重金招聘Python工程师标准>>> Sqlite教程&#xff1a; http://www.runoob.com/sqlite/sqlite-tutorial.html 加载sqlite jdbc驱动&#xff1a; static{ try { Class.forName("org.sqlite.JDBC"); } catch (ClassNotFoundException e) { e.p…

算法基础知识科普:8大搜索算法之AVL树(中)

昨天我们介绍了平衡二叉树的基本概念&#xff0c;通过平衡因子来控制左右子树的深度&#xff0c;使得整个二叉搜索树始终保持平衡状态。这个算法的核心在于当平衡因子超过范围&#xff0c;如何通过旋转的方式来使二叉搜索树保持平衡&#xff0c;以及平衡后对应结点平衡因子如何…

Linux登录那点事

跨平台系列汇总&#xff1a;http://www.cnblogs.com/dunitian/p/4822808.html#linux 我们登录linux的时候基本上不太关注上面的这个提示&#xff0c;其实这个还是有点文章的 简单解释一下&#xff1a; 上一次dnt用户登录的时间&#xff0c;以及终端是tty1 知识普及&#xff1a;…

解决了一个遗留的Portlet奇怪问题

在做Portlet的时候碰到一个奇怪的问题&#xff0c;使用Java应用程序来进行RFT传输好好的&#xff0c;但在Pluto下&#xff0c;同样的一段程序却不行&#xff0c;提示&#xff1a;No client transport named https found!  搜索GT官网的maillist&#xff0c;发现有人提到是AXI…

Python 程序如何高效地调试?

Python在debug方面的支持还是不错的&#xff0c;在明确代码意义的情况下&#xff0c;通过log、print和assert分析错误原因&#xff0c;配合单元测试可以很高效。然而&#xff0c;实际工作中大量代码很可能出自他人之手&#xff0c;这种情况下&#xff0c;使用debugger就显得更加…

selenium中javascript调试

之前写了使用js输入长文件的文章&#xff0c;有同事在使用时&#xff0c;发现竟然无法输入&#xff0c;也不知道是什么原因&#xff0c;且用的还是id方式。 在参考网文后&#xff0c;才发现是js写的有问题&#xff0c;现总结一下 javascript调试&#xff0c;在firefox中就自带有…

算法基础知识科普:8大搜索算法之AVL树(下)

昨天我们介绍了在进行结点插入时&#xff0c;若左子树深度超过右子树深度两层则进行右旋来保持平衡。今天继续介绍&#xff0c;若右子树深度超过左子树深度两层时的左旋操作&#xff0c;以及删除结点后平衡因子的变更问题。 这些都掌握后&#xff0c;基本上对AVL就有一个很全面…

《代码敲不队》第八次团队作业:Alpha冲刺 第二天

项目内容这个作业属于哪个课程任课教师博客主页链接这个作业的要求在哪里作业链接地址团队名称代码敲不队作业学习目标掌握软件编码实现的工程要求。团队项目github仓库地址链接 GitHub 第二天 日期&#xff1a;2019/6/16 今日完成任务情况以及遇到的问题 针对设计好的数据库&a…

我的.net程序为何不能执行?

今天早上习惯性的打开公司内部的网站。不料却发现我在输入地址后&#xff0c;系统竟会弹出一个对话框要求输入用户名和密码。想了想后&#xff0c;输入了AD的密码&#xff0c;就可以进入了网站。不经意间我又发现所有的asp.net的页面都不能打开&#xff0c;而asp的页面却一点问…

利用MySQL触发器实现check和assertion

MySQL虽然输入check语句不会报错&#xff0c;但是实际上并没有check的功能。但是MySQL 依然可以利用触发器来实现相应功能。 本文将根据两个例子简要阐述MySQL实现check和assertion的思路。 MySQL触发器 官方文档 MySQL Signal 官方文档 注意 signal异常处理功能在MySQL5.5版本…

算法基础知识科普:8大搜索算法之红黑树(上)

平衡二叉树&#xff08;AVL&#xff09;是一种特殊的二叉搜索树&#xff08;BST&#xff09;&#xff0c;即每个结点的值都大于其左子树且小于其右子树的值&#xff08;若存在&#xff09;&#xff0c;并通过引入平衡因子的概念来保持树的平衡。平衡二叉树算法的重点是在插入、…

Java Web学习总结(17)——JSP属性范围

2019独角兽企业重金招聘Python工程师标准>>> 所谓的属性范围就是一个属性设置之后&#xff0c;可以经过多少个其他页面后仍然可以访问的保存范围。 一、JSP属性范围 JSP中提供了四种属性范围&#xff0c;四种属性范围分别指以下四种&#xff1a; 当前页&#xff1a;…

为什么不提供离线Blog管理工具呢?

网络Blog现在是到处开花, 好像全世界的网民都开始写Blog了. 但因为Web的HTTP无状态协议, 网站本身都自己设置有session过期时间. 如果写的Blog文字多,时间一长用户登录状态就没了,当你提交你的文字时系统会出错,结果你回来时,你辛辛苦苦写的长长的文字都没了, 你是不是很气愤?…

javascript a 标签打开相对路径,绝对路径

<a>标签中的href中&#xff0c;如果你写一个路径默认是以相对路径打开的&#xff0c;加上"http://" 消息头那就可以打开绝对路径 html&#xff1a; <a hrefjavascript:void(0); target_blank onclickCommon.openUrl(" rowObject.baiduPanUrl ")…

算法基础知识科普:8大搜索算法之红黑树(中)

红黑树也是一种特殊形式的二叉搜索树&#xff0c;通过结点的颜色以及三条规则来保证二叉搜索树的平衡。规则1&#xff1a;根结点的颜色是黑色&#xff0c;规则2&#xff1a;叶子结点到根结点路径上遇到的黑色结点数目相同&#xff0c;规则3&#xff1a;叶子结点到根结点路径上无…

Java基础学习总结(3)——抽象类

2019独角兽企业重金招聘Python工程师标准>>> 一、抽象类介绍 下面通过一下的小程序深入理解抽象类 因此在类Animal里面只需要定义这个enjoy()方法就可以了&#xff0c;使用abstract关键字把enjoy()方法定义成一个抽象方法&#xff0c;定义如下&#xff1a;public ab…