• 忘掉天地
  • 仿佛也想不起自己
bingliaolongBingliaolong  2025-03-10 23:37 Aet 隐藏边栏 |   抢沙发  8 
文章评分 2 次,平均分 5.0

Windows相关

消息队列

  1. PostMessage
    1. 将消息异步发送到指定窗口的消息队列
      目标窗口可以是同一进程或不同进程的窗口
    2. 只要发送方持有目标窗口的有效句柄(HWND),即可跨进程发送消息
    3. 场景:
      例如通知其他进程的窗口更新界面或执行特定操作
      例如结合 WM_COPYDATA 消息传递小型数据块(最大约64KB

  1. PostThreadMessage
    1. 将消息异步发送到指定线程的消息队列。目标线程无需关联窗口,但必须已创建消息队列
    2. 需知道目标线程的 线程IDDWORD),且目标线程已调用过消息循环函数(如 GetMessage
    3. 场景:
      后台线程通信:与无窗口的后台线程交互(如日志线程、工作线程)
      自定义消息协议:定义线程专用的消息类型(需注册自定义消息)

信号量

  1. 作用
    1. 协调多进程对共享资源的访问

互斥量

  1. 作用
    1. 协调多进程对共享资源的访问

剪贴板

基于内存共享的IPC

文件映射

  1. 原理
    1. 将物理文件或虚拟内存映射到多个进程的地址空间,实现数据共享

  1. 特点
    1. 高性能:适用于大数据量传输(如音视频流)
    2. 需同步机制(如互斥量)避免读写冲突
    3. 命名共享内存(Global\\前缀)支持跨会话访问

堆共享

  1. 原理
    1. 通过HeapCreate创建共享堆,其他进程通过HeapOpen访问

  1. 场景
    1. 小规模结构化数据共享,需手动管理内存分配

基于消息传递的IPC

邮件槽(Mailslots)

  1. 原理
    1. 单向通信机制,支持一对多消息广播

  1. 特点
    1. 支持跨网络通信(需指定服务器名)
    2. 消息可能丢失(无确认机制)

WM_COPYDATA消息

  1. 原理
    1. 通过SendMessage发送WM_COPYDATA消息,传递只读数据块

  1. 限制
    1. 仅适用于同一用户会话内的窗口通信
    2. 数据最大约64KB(受SendMessage限制)

基于管道(Pipes)的IPC

匿名管道(Anonymous Pipes)

  1. 原理
    1. 单向通信,通常用于父子进程间重定向输入输出
  2. 限制
    1. 仅支持本地机器上的进程通信

命名管道(Named Pipes)

  1. 原理
    1. 双向通信,支持多客户端连接和异步操作
  2. 特点
    1. 支持跨网络通信(UNC路径)
    2. 提供安全描述符控制访问权限
  3. 服务端

  1. 客户端

基于网络的IPC

套接字(Sockets)

  1. 原理
    1. 使用TCP/UDP协议实现跨机器进程通信
  2. 优势
    1. 跨平台兼容性(Windows/Linux/Mac
    2. 支持复杂网络拓扑(如NAT穿透)
  3. 示例技术:
    1. 本地环回地址(127.0.0.1)用于本机进程通信
    2. HTTP/WebSocket:适用于与Web应用交互

RPC(Remote Procedure Call)

  1. 原理
    1. 通过IDL(接口定义语言)生成存根代码,实现远程函数调用
  2. 开发流程
    1. 编写IDL文件定义接口
    2. 使用MIDL编译器生成代理/存根代码
    3. 服务器实现接口,客户端调用远程方法
  3. 特点
    1. 支持自动数据类型封送(Marshaling
    2. 集成Windows安全模型(如Kerberos认证)

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

bingliaolong
Bingliaolong 关注:0    粉丝:0 最后编辑于:2025-03-18
Everything will be better.

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享