Win32进程间通信分配

问题描述 投票:0回答:1

我需要做一个C++作业,但我对Win32 IPC很陌生.我昨天做了一点研究,但我找不到我要找的东西。

基本上,我需要两个程序,第一个创建一个带有分页文件的FileMapping,等待一个缓冲区,显示缓冲区,然后关闭它。

第二个程序连接到通信通道,将缓冲区写入第一个程序,然后关闭。

我找到的最接近的是这个资源。"IPC通信但那里的人用管道而不是使用分页文件的通信渠道。

另外,我发现我可以用分页文件打开一个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);

如果有人能提供一点帮助,那将是非常有价值的(也许是一个应用程序的骨架?)。我昨天试图做一些研究,但徒劳无功。

谢谢你的帮助

c++ winapi synchronization ipc
1个回答
0
投票

CreateFileMapping(), OpenFileMapping()MapViewOfFile() 确实是你需要调用的分配共享内存缓冲区的函数。

第一个应用程序必须。

  • 创建文件映射。
  • 创建一个同步对象,最好是一个Event,以等待它的到来。
  • 创建一个额外的线程,它将等待Event的信号。在主(UI)线程中这样做会阻塞应用程序。
  • 当Event被发出信号时,发布一条自定义消息(WM_APP+nnn)到主线程,显示缓冲区的内容。
  • 这时之后怎么做是规范或设计的问题,比如退出应用,只是不再等待缓冲区接收数据,清除事件再等待等等。

第二个应用必须。

  • 打开 "文件映射 "和 "事件"。如果失败,显示错误信息或警告并退出。
  • 将数据写入共享内存缓冲区。
  • 给事件发出信号。
  • 退出。

它可以进一步改进,例如,如果事件不在非信号状态,第二个应用程序可能不会写入缓冲区。

© www.soinside.com 2019 - 2024. All rights reserved.