进程之间通信的几种方式,总有一款适合你

本文介绍了进程之间通信的三种方式:共享内存、命名管道(PipeMsg)和消息队列(MsgQueue),并提供了相应的代码示例。在共享内存中,通过约定的内存地址实现数据交换,需注意同步问题;命名管道实现了双向通信,通过CreateFile等函数进行读写操作;消息队列利用MSMQ实现高效通信,强调了peek和get方法的区别。
摘要由CSDN通过智能技术生成

进程之间通信的几种方式

前言

这个问题面试官必问的好吧,这是非常经典的问题,正好之前的项目中有这样的经历,所以就咱们的项目出发,讲一下进程之间通信的几种方式。

shared memory

共享内存,大家读写双方约定一块内存地址,然后咱们分别读写这块地址的数据(当然,大家也要一起约定好数据的格式)。记得加锁哦。
咱们看一下shared memory的写和读是咋搞的:

    //1.没有锁的话,创建锁,然后尝试获取锁
    HANDLE Gmutex = OpenMutex(MUTEX_ALL_ACCESS, FALSE, TEXT("MutexForSharedMemory"));
    if (Gmutex == NULL)
    {
   
        Gmutex = CreateMutex(NULL, FALSE, TEXT("MutexForSharedMemory"));
    }

    WaitForSingleObject(Gmutex, INFINITE);  //等待获取Gmutex,不然就一直卡死在这里,时间是infinite

    //创建共享内存区域
    SECURITY_ATTRIBUTES ScrtyAttr = {
    0 };
    ScrtyAttr.bInheritHandle = FALSE;
    ScrtyAttr.lpSecurityDescriptor = NULL;
    ScrtyAttr.nLength = sizeof(SECURITY_ATTRIBUTES);
    HANDLE GSharedMem = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值