| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4994 人关注过本帖, 1 人收藏
标题:共享内存实现进程间通信
只看楼主 加入收藏
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
结帖率:94.72%
收藏(1)
已结贴  问题点数:8 回复次数:18 
共享内存实现进程间通信
程序代码:
#include <windows.h>
#include <stdio.h>

int main()
{
    int handle = 0xFFFFFFFFFFFFFFFF;
    void* handle2 = INVALID_HANDLE_VALUE;

    // Create a paging file-backed MMF to contain the edit control text.
    // The MMF is 4 KB at most and is named MMFSharedData.
    static HANDLE s_hFileMap = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, 4 * 1024, ("MMFSharedData"));

    if (s_hFileMap != NULL) {

        if (GetLastError() == ERROR_ALREADY_EXISTS) {
            puts("Mapping already exists - not created.");
            CloseHandle(s_hFileMap);

            // See if a memory-mapped file named MMFSharedData already exists.
            HANDLE hFileMapT = OpenFileMapping(FILE_MAP_READ | FILE_MAP_WRITE,
                FALSE, TEXT("MMFSharedData"));

            if (hFileMapT != NULL) {
                // The MMF does exist, map it into the process's address space.
                PVOID pView = MapViewOfFile(hFileMapT, 
                    FILE_MAP_READ | FILE_MAP_WRITE, 0, 0, 0);

                if (pView != NULL) {

                    // Put the contents of the MMF into the edit control.
                    puts((PTSTR) pView);
                    UnmapViewOfFile(pView);
                } else {
                    puts("Can't map view.");
                }

                CloseHandle(hFileMapT);

            } else {
                puts("Can't open mapping.");
            }

        } else {

            // File mapping created successfully.

            // Map a view of the file into the address space.
            PVOID pView = MapViewOfFile(s_hFileMap,
                FILE_MAP_READ | FILE_MAP_WRITE, 0, 0, 0);

            if (pView != NULL) {
                // Put edit text into the MMF.
                sprintf((char*)pView, "%s", "Some test data");
            
                // Protect the MMF storage by unmapping it.
                UnmapViewOfFile(pView);
            } else {
                puts("Can't map view of file.");
            }
        }

    } else {
        puts("Can't create file mapping.");
    }

    return 0;
}


[此贴子已经被作者于2016-1-28 10:16编辑过]

搜索更多相关主题的帖子: contain control Create 通信 
2016-01-11 11:26
eFun
Rank: 6Rank: 6
等 级:禁止访问
威 望:1
帖 子:58
专家分:400
注 册:2015-12-27
收藏
得分:3 
好像进程间通常是dde通讯,你这是什么方式?有什么用途呢?
2016-01-11 12:09
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:3 
文件映射,把文件當內存。不過這個代碼有點怪,不知道測試目標是什麽。

授人以渔,不授人以鱼。
2016-01-11 12:12
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:3 
不懂不要乱说,不是把文件当内存,是把内存当文件。

至于dde是windows下的概念,一种主从关系的数据交换机制,属于淘汰的技术。

进程间通信的主要机制有管道、信号、消息队列、共享内存和套接字。蓝孩这还是在为他的天下无敌做技术储备。不知道我有生之年能否见到这款旷世奇作

重剑无锋,大巧不工
2016-01-11 18:17
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
回复 4楼 beyondyf
我以为你只会算法,没想到你会的还挺多的

我就是真命天子,顺我者生,逆我者死!
2016-01-11 18:30
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
回复 5楼 BlueGuy
是我最喜欢算法,其他的方面并不太在意,随用随取没技术含量的东西我没兴趣。当然没兴趣并不表示我不会,也就你拿这些基础能力来和小鲜肉们炫耀。就说你这共享内存的通信方式,关键不在于如何读写,而在于如何协调进程防止冲突锁死等情况,这层决策属于算法的范畴。

重剑无锋,大巧不工
2016-01-11 18:53
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
回复 6楼 beyondyf
你看过 《windows核心编程》 ?

我就是真命天子,顺我者生,逆我者死!
2016-01-11 19:22
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
就你那几行所谓的算法代码有技术含量

我就是真命天子,顺我者生,逆我者死!
2016-01-11 19:29
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
我看它干毛。你啊,就活在自己的世界里吧。祝你开心!

重剑无锋,大巧不工
2016-01-11 19:34
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
说的是你自己吧,你没看过 《windows核心编程》,你怎么会共享内存
随用随取,靠想像写代码,懒的听你扯淡

我就是真命天子,顺我者生,逆我者死!
2016-01-11 19:37
快速回复:共享内存实现进程间通信
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016825 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved