使用CreateNamedPipe进行 进程通信的示例
来源:互联网 发布:董洁王大治知乎 编辑:程序博客网 时间:2024/05/02 08:43
使用CreateNamedPipe进行 进程通信的示例。
#include<iostream>
#include<windows.h>
#include<ctime>
using namespace std;
DWORD WINAPI thread1(LPVOID param)
{
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,NMPWAIT_WAIT_FOREVER,0);//创建了一个命名管道
if(ConnectNamedPipe(hPipe, NULL)==NULL)//等待另一客户的链接。
{
cerr<<"链接失败!"<<endl;
}
else
{
cerr<<"链接成功"<<endl;
}
l:
if(ReadFile(hPipe,buf,256,&rlen,NULL)==FALSE)//读取管道中的内容(管道是一种特殊的文件)
{
CloseHandle(hPipe);//关闭管道
cerr<<"read data from Pipe failed!"<<endl;
}
else
{
cout<<"thread1 get data="<<buf<<" size="<<rlen<<endl;
char wbuf[256]="hahaha";
sprintf(wbuf,"%s %d",wbuf,rand()%1000);
DWORD wlen=0;
WriteFile(hPipe,wbuf,sizeof(wbuf),&wlen,0);
cout<<"thread1 write data to pipe,data="<<wbuf<<" size="<<wlen<<endl;//收完发
_sleep(1000);
goto l;//如果接收成功,则继续接收。
}
return 0;
}
DWORD WINAPI thread2(LPVOID param)
{
char buf[256]="lauo pipe test...\0\0";
sprintf(buf,"%s %d",buf,rand()%1000);
DWORD wlen=0;
Sleep(1000);//等待pipe的创建成功!
if (WaitNamedPipe(TEXT("\\\\.\\Pipe\\mypipe"), NMPWAIT_WAIT_FOREVER) == FALSE)
{
cerr<<"connect the namedPipe failed!"<<endl;
return 0;
}
HANDLE hPipe=CreateFile(TEXT("\\\\.\\Pipe\\mypipe"), GENERIC_READ | GENERIC_WRITE, 0,
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if((long)hPipe==-1)
{
cerr<<"open the exit pipe failed!"<<endl;
return 0;
}
while(1)
{
if(WriteFile(hPipe,buf,sizeof(buf),&wlen,0)==FALSE)
{
cerr<<"write to pipe failed!"<<endl;
}
else
{
cout<<"write size="<<wlen<<endl;
char rbuf[256];
DWORD rlen=0;
ReadFile(hPipe,rbuf,sizeof(rbuf),&rlen,0);//这里可以测试,一发必先有一收(另一进程中),否则将无法继续(阻塞式)
cout<<"thread2 read from pipe data="<<rbuf<<" size="<<rlen<<endl<<endl;
}
_sleep(1000);
}
return 0;
}
int main()
{
srand((unsigned)time(NULL));
CreateThread(0,0,thread1,0,0,0);
CreateThread(0,0,thread2,0,0,0);
while(1) Sleep(1000);
return 1;
}
- 使用CreateNamedPipe进行 进程通信的示例
- 利用管道进行进程的通信示例
- CreateNamedPipe
- VS2005 下使用串口控件进行串口通信的示例
- VS2005 下使用串口控件进行串口通信的示例
- 使用WM_COPYDATA进行进程间通信的一个问题
- C#中使用SendMessage进行进程通信的实例
- C#中使用命名管道进行进程通信的实例
- 控制台程序使用SendMessage进行进程间的通信
- 使用FIFO来进行两个进程间的通信
- 简述使用Messenger进行进程间的通信
- linux进程通信:使用posix消息队列mq进行线程或进程间的通信
- 使用 FIFO 实现进程间通信示例
- 使用共享内存进行进程间通信
- Python使用Socket 进行进程间通信
- 使用Messenger进行进程间通信
- [Android]使用AIDL进行进程间通信
- 使用socketpair进行父子进程通信
- 游戏中PVP和PVE简介
- COM编程入门(详细)
- Java Web 高性能开发,第 2 部分: 前端的高性能
- 字符串的内存存储位置
- Signed vs. Unsigned
- 使用CreateNamedPipe进行 进程通信的示例
- cert记录
- ThreadLocal类的工作原理
- Windows管道技术简述
- ThreadLocal,实现安全的多线程
- 实验二:交换机基本配置
- sicily 1135 飞越原野
- Jquery之页面加载时弹出对话框
- tomcat7异常javax.el.ELException