预览加载中,请您耐心等待几秒...
1/6
2/6
3/6
4/6
5/6
6/6

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

嵌入式操作系统实验指导书实验四进程通信调试实验[实验目的]1、掌握WinCE5.0下进程间通信机制;2、掌握通过对消息传递和共享内存的实现进程间通信的方法;3、了解实现进程通信的编程方法[实验仪器]1、装有PlatformBuilder、EVC和VS.Net开发平台的PC机一台2、XSBase270实验开发平台一套[实验原理]1、软件原理:在项目开发和系统集成中进程间通信的应用非常广泛进程间的通信有以下几种实现方法:利用Windows消息(WM_COPYDATA)、全局原子、内存映射、命名管道以及邮曹。下面介绍利用WM_COPYDATA和内存映射实现进程通信的方法。1.1WM_COPYDATA方法使用WM_COPYDATA消息可以很方便地传递进程间的数据具体定义如下:SendMessage(hwndWM_COPYDATAwParamlParam);其中wParam设置为包含数据的窗体的句柄lParam指向一个COPYDATASTRUCT的结构:typedefstructtagCOPYDATASTRUCT{DWORDdwData;//用户定义数据DWORDcbData;//数据大小PVOIDlpData;//指向数据的指针}COPYDATASTRUCT也就是通过COPYDATASTRUCT的结构来传递数据。需要注意的是WinCE提供的WM_COPYDATA消息来传递进程间的数据并没有提供同步机制所以必须要使用SendMessage函数来发送消息且等待直到对方处理完后返回而不能使用PostMessage函数来发送WM_COPYDATA。1.2内存映射文件的方法内存映射文件提供了一种完全不同的读写文件的方法它是将文件内容映射到内存的某个区域读写文件直接操作内存即可。下面介绍内存映射文件所需的API函数:(1)创建用于内存映射访问的文件在WinCE中要想创建或打开一个用于内存映射访问的文件需要通过CreateFileForMapping函数来实现它是CreateFile函数的一个特殊版本专门提供给内存映射文件使用CreateFileForMapping函数的定义如下:HANDLECreateFileForMapping(LPCTSTRlpFileNameDWORDdwDesiredAccessDWORDdwShareModeLPSECURITY_ATTRIBUTESlpSecurityAttributesDWORDdwCreationDispositionDWORDdwFlagsAndAttributesHANDLEhTemplateFile);(2)创建或打开内存映射文件对象在使用内存映射文件时需要创建或打开内存映射文件对象它实际上是于已经创建或打开的文件建立连接。创建或打开内存映射对象通过CreateFileMapping函数实现此函数定义如下:HANDLECreateFileMapping(HANDLEhFileLPSECURITY_ATTRIBUTESlpFileMappingAttributesDWORDflProtectDWORDdwMaximumSizeHighDWORDdwMaximumSizeLowLPCTSTRlpName);成功创建内存映射文件对象函数将返回一个内存映像对象句柄如果在创建内存映射文件对象已存在将直接返回已打开的内存映像文件对象句柄。(3)获取内存映像文件对象视图当创建或打开了内存映射对象之后。接着就需要得到内存映射文件对象的数据内存指针通过此指针则可以读写文件中的内容也就是获取内存映射文件对象视图。得到内存映射文件对象的数据内存指针通过MapViewOfFile函数实现此函数定义如下:LPVOIDMapViewOfFile(HANDLEhFileMappingObjectDWORDdwDesiredAccessDWORDdwFileOffsetHighDWORDdwFileOffsetLowDWORDdwNumberOfBytesToMap);函数返回值指向映射文件的内存指针。(4)取消文件视图的映射在使用完内存映射文件之后还要调用UnmapViewOfFile函数取消文件视图进行内存清理工作。此函数定义如下:BOOLUnmapViewOfFile(LPCVOIDlpBaseAddress);2、进程通信的实现2.1WM_COPYDATA方法Client端的实现voidCClientDlg::OnBnClickedbtnsendmessage(){CStrin