Win32 进程间通信分配
Posted
技术标签:
【中文标题】Win32 进程间通信分配【英文标题】:Win32 Inter Process Communication Assignment 【发布时间】:2020-05-17 06:51:18 【问题描述】:我需要做一个 C++ 作业,但我对 Win32 IPC 还是很陌生。 我昨天做了一些研究,但我找不到我要寻找的东西。
基本上,我需要两个程序,第一个用分页文件创建一个 FileMapping,等待一个缓冲区,显示缓冲区,然后关闭它。
第二个连接到通信通道,将缓冲区写入第一个程序,然后关闭。
我最接近的是这个资源: IPC Communication 但是那里的人使用管道而不是使用分页文件的通信通道。
另外,我发现我可以打开一个带有分页文件的 FileMapping,就像这样:
TCHAR szMapFileName[] = _T("Local\\HelloWorld");
HANDLE hMapFile = CreateFileMapping(
INVALID_HANDLE_VALUE,
NULL, // Default security
PAGE_READWRITE, // Read/write access
0, // Max. object size
BUFFER_SIZE, // Buffer size
szMapFileName // Name of mapping object);
如果有人可以提供一些非常有价值的帮助(也许是应用程序的骨架?)。我昨天试图做一些研究,但徒劳无功。
谢谢
【问题讨论】:
Creating Named Shared Memory. 【参考方案1】:CreateFileMapping()
、OpenFileMapping()
和 MapViewOfFile()
确实是您需要调用的函数来分配共享内存缓冲区。
第一个应用必须:
创建文件映射。 创建一个同步对象,最好是一个事件,以等待它。 创建一个额外的线程,它将等待事件发出信号。在主 (UI) 线程中执行此操作会阻塞应用程序。 当事件发出信号时,将自定义消息 (WM_APP+nnn
) 发布到主线程,以显示缓冲区的内容。
这是规范或设计的问题,在此之后要做什么,例如退出应用程序,只是不再等待缓冲区接收数据,清除事件并再次等待,等等。
第二个应用必须:
打开文件映射和事件。如果失败,则显示错误消息或警告并退出。 将数据写入共享内存缓冲区。 向事件发出信号。 退出。可以进一步改进,例如,如果事件不处于非信号状态,第二个应用程序可能不会写入缓冲区。
【讨论】:
“创建一个额外的线程,它将等待事件发出信号。在主 (UI) 线程中执行此操作会阻塞应用程序。” - 不,并不真地。 MsgWaitForMultipleObjects 将无缝融入任何类型的应用程序,当有工作要做时从不阻塞,在没有工作时阻塞。以上是关于Win32 进程间通信分配的主要内容,如果未能解决你的问题,请参考以下文章