/**
* 主题:多线程和多进程技术
*
*/
Q1: C++进程间通讯的方式
管道(命名管道,匿名管道),socket,事件event,共享内存,消息队列
实例:命名管道实例
/**
* 方案如下所示
* 管道服务端:CreateNamedPipe(创建管道HANDLE hPipe) -> ConnectNamedPipe(连接客户端)-> (WriteFile)往管道写数据/(readFile)往管道读数据
* 管道客户端: WaitNamedPipe(等待命名管道实例有效,设置超时时间) -> CreateFile(打开管道,返回命名管道句柄) -> (WriteFile)往管道写数据/(readFile)往管道读数据
* 小结:api函数:CreateNamePipe,ConnectNamedPipe,WaitNamedPipe.CreateFile,WriteFile,ReadFile
*/
#include "stdafx.h"
#include <stdio.h>
#include <windows.h>
#include <ctime>
int main(int argc,_TCHAR *argv[])
{
srand(time(NULL));
char buf[256] = "";
DWORD rlen = 0;
HANDLE hPipe = CreateNamedPipe(
TEXT("\\\\.\\Pipe\\mypipe"), //管道名
PIPE_ACCESS_DUPLEX, //管道类型
PIPE_TYPE_MESSAGE|PIPE_READMODE_MESSAGE|PIPE_WAIT, //管道参数
PIPE_UNLIMITED_INSTANCES, //管道能创建的最大实例数量
0, //输出缓冲区长度 0表示默认
0, //输入缓冲区长度 0表示默认
NMPWAIT_WAIT_FOREVER, //超时时间
NULL);
if(INVALID_HANDLE_VALUE == hPipe)
{
printf("Create Pipe Error(%d)\n",GetLastError());
}
// 创建命名管道成功
else
{
//阻塞等待客户端连接
printf("Waiting For Client Connection...\n");
if(ConnectNamedPipe(hPipe,NULL) == null)
{
printf("Connection failed!\n");
}
else
{
printf("Connection Success!\n");
}
// 进程间数据通讯
while(true)
{
// 接收客户端发送过来的内容
if(ReadF
C++:进程间通讯(部分转载,个人整理)
最新推荐文章于 2023-07-10 23:48:11 发布