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

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

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

 

程序结构

一个服务程序(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进程通信和Linux进程通信

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

junxuezheng的博客 2559

Windows环境下利用“共享内存”实现进程间通信的C/C++代码---利用CreateFileMapping和MapViewOfFile

进程间的通信方式有很多种, 上次我们说了最傻瓜的“共享文件”的方法。

认知 行动 坚持 3万+

windows共享内存操作

windows 共享内存

windows 映射文件会释放内存吗_Windows系统共享内存管理

一 进程逻辑空间 物理空间​如上图所示,每个进程都有自己的逻辑空间,这些逻辑空间,会被映射到具体的物理空间中。每个进程的逻辑空间都是彼此隔离,相互独立不受干扰的。但是他们都会被映射到同一个物理空间去,当其所映射的物理空间有重叠的时,这重叠的部分就共享了物理内存二 共享内存关键问题创建物理内存将物理内存映射到进程空间读写互斥控制1)创建物理内存,获得物理内存资源句柄比如 由A进程 负责创建共享内存A...

weixin_39638048的博客 489

解决vscode 连接服务器报错:The remote host may not meet VS Code Server‘s prerequisites for glibc and libstdc++

解决vscode远程连接服务器报错:The remote host may not meet VS Code Server's prerequisites for glibc and libstdc++ (The remote host does not meet the prerequisites for running VS Code Server)

qq_37200100的博客 9910

UE4/5编译报错MSB3073终极解决指南:从路径检查到MSVC版本降级

本文针对UE4/5开发中常见的MSB3073编译报错,提供了一套从根源到实战的终极解决指南。文章系统性地讲解了错误成因,并分层次指导排查路径字符、环境变量、MSVC版本兼容性、权限冲突等核心问题,重点介绍了通过降级MSVC编译器版本等关键操作来彻底解决此编译难题。

rl6adventurer的博客 1436

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

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

imxiangzi的专栏 4148

解密UFS Explorer:Drobo BeyondRAID数据恢复实战指南

本文详细介绍了使用UFS Explorer Professional Recovery软件中的Drobo BeyondRAID助手进行数据恢复的完整实战流程。当Drobo设备因BeyondRAID配置信息丢失而无法访问时,该工具能安全、只读地扫描硬盘,虚拟重建存储池,帮助用户找回宝贵数据。指南涵盖了从前期准备、硬盘选择、配置扫描到数据安全导出的每一步关键操作与常见问题解决方案。

weixin_29219539的博客 270

Windows进程通信之共享内存通信

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

Quellaaa的博客 2097

【UE5】多用户协同编辑实战:从配置到实时协作

本文详细介绍了在虚幻引擎5中配置和使用多用户协同编辑功能的完整流程。从启用Multi-User Editing插件、配置UDP Messaging网络通信,到启动服务器、创建会话并实现实时协作,提供了从环境准备到实战协作的清晰指南。文章还分享了资产同步、场景分批、对象锁定等实用技巧,并强调了网络配置与版本一致性等关键避坑点,旨在帮助中小型团队提升关卡设计和原型开发的协作效率。

weixin_29001683的博客 267

“软开关”硬技术!ZVS和ZCS到底谁更牛?看完这个例子你就懂了!

❌ ZVS 和 ZCS 是万能的?→ 不,它们都有实现条件,谐振参数选不好照样硬拐弯!❌ 只要有谐振就一定ZVS?→ 不,一定要设计合适的死区时间和负载条件才行!ZVS 是让电压先“冷静”,ZCS 是让电流先“退场”。一个是开门不撞墙,一个是关门不甩门。懂了它们,功率设计就是在跳华尔兹而不是打架!💃🔌。

weixin_43199439的博客 1239

qt共享内存

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

weixin_42887343的博客 7031

光学防抖OIS介绍与标定

前言:先看一下有无ois系统的效果。 1. OIS系统的作用就是消除镜头的抖动。 Gyro感受方向,Hall感受位移,Actuator驱动马达来矫正抖动方向和位移。 2.ois系统的结构构成 从上面来看ois系统主要有Hall,...

camerall 1万+

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

linux下一切皆文件

No Game No Life 1644

【运动规划算法项目实战】Artificial Potential Field算法(附ROS C++代码)

在机器人行业中,路径规划是一个关键的任务,它涉及到如何让机器人在复杂的环境中安全而高效地移动。人工势场算法(Artificial Potential Field Algorithm)是一种常用的路径规划方法,它借鉴了物理学中的势能概念,通过模拟力的作用来引导机器人的移动。本文将详细介绍人工势场算法的原理、在路径规划中的应用、算法优缺点以及代码实现。人工势场算法基于两种势场:斥力场和引力场。斥力场使机器人远离障碍物,而引力场将机器人吸引到目标位置。

xiewf的博客 1万+

54、生物神经网络建模全解析

本文系统解析了生物神经网络的建模方法,涵盖从单个神经元到神经网络的多个时空尺度。首先介绍神经元层面的生物物理模型(如霍奇金-赫胥黎模型和多隔室模型)与多种简化模型(如菲茨休-纳古莫、莫里斯-勒卡尔、积分发放模型等),并分析其适用场景。随后探讨突触层面的信号传递机制,对比电突触与化学突触在结构、传输速度和方向上的差异,阐述其在神经网络建模中的理论意义。文章旨在为理解神经系统的信息处理机制、构建受生物启发的人工智能模型提供理论基础。

app77的博客 76

进程通信之共享内存(Windows)

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

m0_62297377的博客 1199

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

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的博客 667

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

进程通信之共享内存

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

hsjkdhs的博客 1198

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【Windows进程通信】共享内存

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

Flywithdawn的博客 1621

Windows共享内存详解

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

余识- 8295

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

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

MusicMan 2903

RTX与Windows进程通信实例

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

gitblog_06704的博客 398

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

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

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值