命名管道其实用的还是API函数,我估计是底层应该是操作系统 分配了一块单独的内存空间,两个程序或是多个程序都可以对这块内存进行读写。
这些所谓的管道API函数,就是我们编程人员操作这些内存空间的方法。
×××××××××××××××××××××××××××××××××××××
用到的API函数
管道服务器首次调用CreateNamedPipe()函数时,使用nMaxInstance参数指定了能同时存在的管道实例的最大数目。服务器可以重复调用CreateNamedPipe()函数去创建管道新的实例,直至达到设定的最大实例数。下面给出CreateNamedPipe()的函数原型:
HANDLE CreateNamedPipe(
LPCTSTR lpName, // 指向管道名称的指针
DWORD dwOpenMode, // 管道打开模式
DWORD dwPipeMode, // 管道模式
DWORD nMaxInstances, // 最大实例数
DWORD nOutBufferSize, // 输出缓存大小
DWORD nInBufferSize, // 输入缓存大小
DWORD nDefaultTimeOut, // 超时设置
LPSECURITY_ATTRIBUTES lpSecurityAttributes // 安全属性指针
);
目的已经实现了,详细见孙鑫的书 VC++ 深入浅出
第一步:创建一个解决方案
第二步:添加两个对话框程序
第三步:添加 List Edit Button控件 ,修改ID 和Caption,调整各自的位置。
第四步:完成了A 的代码
第五步:完成了B的代码
第六步:调整了A的创建管道的代码
第七步:编译 调试 运行 结果OK
××××××××××××××××××××××××××××××××
后记:上述功能只是测试管道功能的可行性,为了实现稳定可靠的通讯。
需要做出以下改进:
1)创建一个工作线程,不断监听是否有数据管道里面过来,如果有的话立即处理,不然时间长了缓存就满了
2)
××××××××××××××××
源代码如下:链接: http://pan.baidu.com/s/1gdrpzeN 密码: 7in5