• Windows 进程间通信 共享内存


    向内存中写数据

     1 // SharedMemorySample_write_main.cpp
     2 #include <SDKDDKVer.h>
     3 #include <Windows.h>
     4 #include <stdio.h>
     5 
     6 int main(int argc, char* argv[])
     7 {
     8     int        shmem_size = 16;  // 16byte
     9     HANDLE    shmem = INVALID_HANDLE_VALUE;
    10     HANDLE    mutex = INVALID_HANDLE_VALUE;
    11 
    12     mutex = ::CreateMutex(NULL, FALSE, "mutex_sample_name");
    13 
    14     shmem = ::CreateFileMapping(
    15         INVALID_HANDLE_VALUE,
    16         NULL,
    17         PAGE_READWRITE,
    18         0,
    19         shmem_size,
    20         "shared_memory_name"
    21         );
    22 
    23     char *buf = (char*)::MapViewOfFile(shmem, FILE_MAP_ALL_ACCESS, 0, 0, shmem_size);
    24 
    25 
    26     for (unsigned int c = 0; c < 60; ++c) {
    27         // mutex lock
    28         WaitForSingleObject(mutex, INFINITE);
    29 
    30         // write shared memory
    31         memset(buf, c, shmem_size);
    32 
    33         printf("write shared memory...c=%d
    ", c);
    34 
    35         // mutex unlock
    36         ::ReleaseMutex(mutex);
    37 
    38         ::Sleep(1000);
    39     }
    40 
    41     // release
    42     ::UnmapViewOfFile(buf);
    43     ::CloseHandle(shmem);
    44     ::ReleaseMutex(mutex);
    45 
    46     return 0;
    47 }

    从内存中读数据

     1 // SharedMemorySample_read_main.cpp
     2 #include <SDKDDKVer.h>
     3 #include <Windows.h>
     4 #include <stdio.h>
     5 
     6 int main(int argc, char* argv[])
     7 {
     8     int        shmem_size = 16;  // 16byte
     9     HANDLE    shmem = INVALID_HANDLE_VALUE;
    10     HANDLE    mutex = INVALID_HANDLE_VALUE;
    11 
    12     mutex = ::CreateMutex(NULL, FALSE, "mutex_sample_name");
    13 
    14     shmem = ::CreateFileMapping(
    15         INVALID_HANDLE_VALUE,
    16         NULL,
    17         PAGE_READWRITE,
    18         0,
    19         shmem_size,
    20         "shared_memory_name"
    21         );
    22 
    23     char *buf = (char*)::MapViewOfFile(shmem, FILE_MAP_ALL_ACCESS, 0, 0, shmem_size);
    24 
    25 
    26     for (unsigned int c = 0; c < 60; ++c) {
    27         // mutex lock
    28         WaitForSingleObject(mutex, INFINITE);
    29 
    30         printf("read shared memory...c=%d
    ", buf[0]);
    31 
    32         // mutex unlock
    33         ::ReleaseMutex(mutex);
    34 
    35         ::Sleep(1000);
    36     }
    37 
    38     // release
    39     ::UnmapViewOfFile(buf);
    40     ::CloseHandle(shmem);
    41     ::ReleaseMutex(mutex);
    42 
    43     return 0;
    44 }
  • 相关阅读:
    做过的项目介绍
    我在爱板网写的-- 【望月追忆】带你入门STM32F0系列文章
    注释:佛祖保佑--永无BUG
    【项目】----C/C++语法知识:typedef struct 用法详解
    【神舟王】----PCB 数字地 和 模拟地 处理方法
    NSDateFormatter的常用格式和格式化参数
    IOS常用开发第三方库整理
    iOS上如何让按钮文本左对齐问题(对齐方式)
    Swift学习5---协议(protocol)和扩展(extension)
    Swift学习4---枚举和结构体
  • 原文地址:https://www.cnblogs.com/diaoss/p/11583401.html
Copyright © 2020-2023  润新知