windows进程通信之共享内存那点事

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

第一次做服务程序,碰到不少问题,稍作总结,留作后用。

 

程序结构

一个服务程序(A),每当有新用户登录,启动一个托盘(B),服务程序可以发数据给托盘,托盘也可以发数据给服务程序。因为二者都是在本机由此想到了使用共享内存。

新建两块共享内存,一块用作A写B读,另一块B写A读。因为server操作系统支持多用户登录,所以可能存在多个B程序。

 

A的大概代码:

//关于填充子进程命令行参数要多说一句,B写好数据之后要通知A来读,所以要发送一个消息给A,此时调用PostThreadMessage,第一个参数便是目的地的主线程ID

char szCmdLine[MAX_PATH];
sprintf_s(szCmdLine, MAX_PATH, "%ld",oGlobalConfig.dwMainThreadId

LPTSTR szCmdline = _tcsdup((LPCTSTR)szCmdLine);

//创建子进程,创建之后要保留子进程的主线程ID,从pi取得。这个也是A写完数据后

if (!CreateProcessAsUser( pExplorerToken[i] ,strTrayName.c_str(), szCmdLine ,
      NULL,NULL,FALSE , NORMAL_PRIORITY_CLASS| CREATE_NEW_CONSOLE ,NULL,NULL,&si,&pi ) )
     {
      printf("打开失败 %s\n",strTrayName.c_str());
     }

 

windows使用共享内存实例 今天复习一下windows下进程间通讯的方法:共享内存,以下是简单实例客户端:#include <windows.h> #include <stdio.h> #pragma pack(1) struct ShareData { int iType; int iSize; char strData[4096]; }; #pragma pack() int main(... 阅读详情

相关推荐

命名管道通信和共享内存通信

介绍共享内存通讯和命名管道通讯两种通讯方式,包括命名管道的实现方式以及共享内存的思路。

2302_81342533的博客 1074

windows共享内存操作

windows 共享内存

【并发编程四】windows进程通信和Linux进程通信

原本写完上一篇[【并发编程三】C++进程通信(管道pipe)],就准备写消息队列的c++demo了,但是真正查找资料才发现网上都是linux下的消息队列的c++demo,就没有windows下的消息队列的进程通信的demwindows没有信号这个概念,但是会提供类似功能的api,比如,杀死进程:linux下的kill信号,windows下提供TerminateProcess的api接口。

junxuezheng的博客 2544

手动删除shmget创建的共享内存

使用shmget创建或打开共享内存的时候,其中有一个参数是制定了权限的,这个权限类似于文件的权限。 指定了什么身份可以打开已经存在的共享内存。   在我的项目中出现了一个程序运行失败, 经过调查发现在使用shmget打开一段共享内存的时候没有权限, 造成这个原因先不管, 下面说一下如果出现这种情况,怎么删除掉已经创建的共享内存。   我使用的是linux系统, 可以使用ipcs -m查看已

imxiangzi的专栏 4145

windows共享内存操作

windows共享内存 共享内存主要是通过映射机制实现的。windows下进程的地址空间在逻辑上是相互隔离的,但是在物理上确实相互重叠的。所谓的重叠是指同一块内存区域可能被多个进程同时使用。 在windows程序开发过程中,当多个进程之间需要访问共同的数据的时候,最好的方式就是使用共享内存进行处理。 编写共享内存的程序模式上基本上是一样的,大致为下面几个过程: 调用CreateFileMappi...

llfjcmx的博客 7217

Windows进程通信共享内存通信

本文章先介绍共享内存是啥,再介绍使用共享内存要涉及的4个函数,最后将实例代码附上,实例代码用于加深理解,读者也可以模仿用例改编使用。 1. 共享内存的简单介绍 共享内存就是允许两个不相关的进程访问同一个虚拟内存。共享内存是在两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常安排为同一段物理内存。进程可以将同一段共享内存连接到它们自己的地址空间中,所有进程都...

Quellaaa的博客 2089

qt共享内存

一、说明 查看此文,共享内存,相信大家都知道进程间通信,即IPC(Inter-Process Communication),进程间通信是指两个进程的数据之间产生交互。而共享内存是实现进程通信的方式之一,其他通信方式可看下图: 查看各通信方式优缺可访问链接,上图内容来源:进程间通讯的7种方式 应用场景分析 首先讨论一下为什么需要进程间通信?因为产品经理说项目需要。。。。。。,技术角度来说,不同的进程有自己的内存空间,正常情况下A进程是不能访问B进程的内存空间的。可是一些大型项目,因为项目业务比较复杂,于是

weixin_42887343的博客 7028

[进程通信] 管道 vs 共享内存 vs 网络

linux下一切皆文件

No Game No Life 1612

进程通信共享内存Windows

进程通信就是**不同进程之间互相传递数据和消息**,让它们能协同工作。我们这次重共享内存通信,直接在内存中开辟共享区域供多个进程访问。

m0_62297377的博客 1186

Windows系统——进程通信共享内存

Windows系统——进程通信共享内存区 实现代码 writer.cpp /* author : eclipse email : eclipsecs@qq.com time : Sun Apr 26 12:44:13 2020 */ #include<bits/stdc++.h> #include<conio.h> #include<windows.h&gt...

qq_44486439的博客 663

进程通信共享内存

共享内存就是允许两个不相关的进程访问同⼀个逻辑内存。共享内存是在两个正在运⾏的进程之间共享和传递数据的⼀种⾮常有效的⽅式。采⽤共享内存的通信效率⽐较⾼。优:因为所有进程共享同⼀块内存,所以共享内存在各种进程间通讯⽅式中具有最⾼的效率,因为进程可以直接读写内存,⽽不需要任何数据的拷⻉。缺:因为所有进程共享内存,就会引起同步的问题,⽽系统对访问共享内存没有进⾏同步机制,就需要⽤户⾃⼰来提供同步措施。IPCS命令简介。

hsjkdhs的博客 1194

Windows进程通信共享内存

共享内存主要是通过映射机制实现的。   Windows 下进程的地址空间在逻辑上是相互隔离的,但在物理上却是重叠的。所谓的重叠是指同一块内存区域可能被多个进程同时使用。系统把同一块内存区域映射到了不同进程的地址空间中,从而达到共享内存的目的。   示例代码中,一方是QT编写的程序来创建并读取共享内存的内容,另一方是VC程序修改共享内存中的内容:   QT: #include "mainwindow.h" #include "ui_mainwindow.h" #include <QDebug> #

Flywithdawn的博客 1617

Windows共享内存详解

主要讲解了windows平台进程间共享数据的一种方法:共享内存

余识- 8279

Windows进程通信共享内存通信(C++)

首先是概念:https://baike.baidu.com/item/%E5%85%B1%E4%BA%AB%E5%86%85%E5%AD%98/2182364?fr=aladdin 这是比较官方的解释 在我的理解,共享内存通信指的是,一个进程开辟一块内存,并且设定内存的读取方式,并且存放数据,然后另一个进程通过一个特定的key值来访问,并且读取里面的值。 接下来是我做的一个简单的客户端和服务...

MusicMan 2888

RTX与Windows进程通信实例

RTX与Windows进程通信实例 去发现同类优质开源项目:https://gitcode.com/ 此仓库提供了一个关于RTX与Windows进程通信的实例,主要包括以下两部分内容: 一个基于Windows MFC的程序,用于创建共享内存,并实现对其读写操作。 RTX进程通过读取共享内存来完成与Windows进程的通信。 开发环境:MS VS2005。 参考资料:RTX Help文档。 推荐...

gitblog_06704的博客 398

Windows系统编程(五)进程通信

进程是操作系统分配资源和调度的独立单位,由进程内核对象和进程内存地址空间构成。不同的进程内存地址空间相互隔离,因此一个进程无法直接访问另一个进程的内存数据。当进程间需要数据共享或任务协作时,就必须使用进程通信进程通信是指在不同进程之间的数据传输。简单的说进程通信就是多进程共享一份内存空间。接下来我们讲解几种不同方式的进程通信

2301_78838647的博客 689
上一篇: 判断系统是64位还是32位的正确方法
下一篇: windows进程通信之共享内存那点事
delete635
博客等级 码龄18年 2粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值