【读书笔记】Windows CE嵌入式系统_【5】_进程间通讯u

时间:2021-09-30 17:48:14
1、Windows CE 提供了多种进程间通信的方式。
  • 剪贴板(Clipboard):可以使用剪贴板函数在不同进程间复制数据。但是一般只适合图形界面的程序,而且剪贴板都是由用户操作完成的。
  • COM / DCOM:通过COM组件的代理  /  存根方式进行进程间数据交换,但只能够表现在对接口函数的调用时传送数据,通过DCOM可以在不同主机间传送数据。
  • 网络套接字(Socket):通过计算机网络,可以在相同主机或不同主机间交换数据。
  • WM_COPYDATA消息: 通过向进程发送WM_COPYDATA消息,将数据放在参数中来传递数据给其他进程。只适合有窗口消息队列的进程。

文件映射(File Mapping),又叫内存映射文件(MMF,Memory-Mapped File)

在Windows CE中,内存映射文件总是会被映射到4GB虚拟地址空间的 0x42000000 到 0x7FFFFFFF 的进程共享区域。利用WincE的内存管理来实现多个进程之间的通信。
【读书笔记】Windows CE嵌入式系统_【5】_进程间通讯u
【读书笔记】Windows CE嵌入式系统_【5】_进程间通讯u

打开程序的多个进程,就可以看到运行结果
// 创建文件
hFile = CreateFileForMapping(TEXT("\\Map.dat"),GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
// 创建内存映射文件
hMapFile = CreateFileMapping(hFile,NULL,PAGE_READWRITE,0,0x10000,TEXT("MMFObj"));
// 把内存映射文件映射到进程共享地址空间
hMMF = MapViewOfFile(hMapFile,FILE_MAP_ALL_ACCESS,0,0,NULL);
// 读取内存映送和文件的内容
INT nVal = *((INT *)hMMF);
// 写数据到内存映射文件
*((INT *)hMMF) = 34;
// 清理资源
UnmapViewOfFile(hMMF);
CloseHandle(hMapFile);
CloseHandle(hFile);

点对点消息队列(Point-to-Point Message Queues)

  一个进程把消息写入队列,需要这个消息的其他进程,就可以通过从队列中取得消息,从而达到进程间通讯的目的。

在Windows CE的消息队列实现中,消息队列有如下特色:
消息可以是任意的数据类型,事实上消息只是一个任意大小的内存缓冲区。这有利于在不同进程之间进行数据交换。
消息队列还可以用来进行同步。符合典型的生产者消费者模型中的消费者等待问题。
消息是没有优先级的。严格按照先进先出的方式进出队列。
Windows CE中的消息队列是基于点对点操作的,它也不能用来进行广播。
【读书笔记】Windows CE嵌入式系统_【5】_进程间通讯u
【读书笔记】Windows CE嵌入式系统_【5】_进程间通讯u
在应用中,消息队列经常用来获得设备的装载 / 卸载通知。