进程间的通讯该如何作,atom它是如何用的?

bronx 2003-10-15 04:24:15
我希望实现两个进程间的通讯?看了atom?不知如何使用?还有其他方法吗?
...全文
41 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
bronx 2003-10-16
  • 打赏
  • 举报
回复
我分别看了核心编程的“内存映射”和ATOM原子,谢谢两位!
bronx 2003-10-15
  • 打赏
  • 举报
回复
spwnihao(面鱼) :谢谢!

FAICHEN(CC):也不错!

FAICHEN 2003-10-15
  • 打赏
  • 举报
回复
atom只能传输段字符串

char send_chr[]="send string";
ATOM m_atom=::GlobalAddAtom(send_chr);
SendMessage(WM_X,(WPARAM)m_atom,0);
其中WM_X为自定义消息
处理消息,添加映射
onX()
{
char receive_str[20];
::GlobalGetAtomName((ATOM)wParam,receive_str,20);
//需要自释放
::GlobalDeleteAtom((ATOM)wParam);
}
spwnihao 2003-10-15
  • 打赏
  • 举报
回复
[转载,蹭分]
利用内存映射文件进行文件I/O操作,一般需要下面几个步骤:

1.调用CreateFile()函数,以适当的方式创建或打开一个文件核心对象
2.把CreateFile()函数返回的文件句柄作为参数,传给CreateFileMapping()函数,由CreateFileMapping()
函数创建一个文件映射核心对象的适当属性;
3.创建了文件映射核心对象后,调用MapViewOfFile()函数,告诉系统把文件的哪一部分映射到进程的地址空间中,
以何种方式映射
4.利用MapViewOfFile()函数返回的指针来使用文件数据
5.操作完毕后,调用UnmapViewOfFile()函数,告诉系统撤销对文件映射核心对象的映射
6.使用CloseHandle()函数关闭文件映射核心对象
7.使用CloseHandle()函数关闭文件核心对象


第一个进程调用CreateFileMapping来创建一个文件映射对象并赋予MyFileMappingObject名称。使用
PAGE_READWRITE标志,进程通过任何被创建的文件视图将有到该内存的读/写权限.

注意ErrorHandler是一个用户定义函数的占位符来显示错误信息和退出代码.

HANDLE hMapFile;

hMapFile = CreateFileMapping(hFile, //当前文件句柄
NULL, //缺省安全属性
PAGE_READWRITE, //读/写权限
0, //文件映射对象的最大尺寸的高字节
0, //文件映射对象的最大尺寸的低字节
"MyFileMappingObject"); //映射对象的名称

if (hMapFile == NULL)
{
ErrorHandler("Could not create file mapping object.");
}
进程然后在MapViewOfFile中使用由CreateFileMapping返回的文件映射对象去创建一个文件视图。
MapViewOfFile函数返回指向文件视图的指针.

LPVOID lpMapAddress;
lpMapAddress = MapViewOfFile(hMapFile, //映射对象句柄
FILE_MAP_ALL_ACCESS, //读/写权限
0, //文件映射开始位置偏移量的高字节
0, //文件映射开始位置偏移量的低字节
0); //映射整个文件

if (lpMapAddress == NULL)
{
ErrorHandler("Could not map view of file.");
}

第二个进程使用MyFileMappingObject名称调用OpenFileMapping函数来使用由第一个进程创建的同一个文件映射对象,
第二个进程使用MapViewOfFile函数得到指向文件视图的指针.

HANDLE hMapFile;
LPVOID lpMapAddress;

hMapFile = OpenFileMapping(FILE_MAP_ALL_ACCESS, //读/写权限
FALSE, //不要继承该名字
"MyFileMappingObject"); //映射对象名称

if (hMapFile == NULL)
{
ErrorHandler("Could not open file mapping object.");
}

lpMapAddress = MapViewOfFile(hMapFile, //映射对象句柄
FILE_MAP_ALL_ACCESS, //读/写权限
0, //文件映射开始位置偏移量的高字节
0, //文件映射开始位置偏移量的低字节
0); //映射整个文件

if (lpMapAddress == NULL)
{
ErrorHandler("Could not map view of file.");
}

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧