资源描述:
《vc之线程和进程之用命名管道实现进程间通信》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、一、创建应用工程 1、创建单文档应用工程 2、添加新单文档应用工程二、编辑菜单项 1、编辑Thread工程之菜单项 2、编辑Child工程之菜单项三、添加变量、函数 1、添加变量 a、为CThreadView类添加变量 b、为CChildView类添加变量 2、添加函数 a、为CThreadView类添加菜单消息响应函数 b、为CChildView类添
2、加菜单消息响应函数四、添加代码 1、为CThreadView类添加代码 a、添加初始化代码CThreadView::CThreadView(){ //TODO:addconstructioncodehere pipe=NULL;}CThreadView::~CThreadView(){ if(pipe) CloseHandle(pipe);} b、添加消息响应函数代码voidCThreadView::OnPipeCreate(){ //TODO:Addyo
3、urcommandhandlercodehere pipe=CreateNamedPipe("\\.\pipe\mypipe",PIPE_ACCESS_DUPLEX
4、FILE_FLAG_OVERLAPPED,0,1,1024,1024,0,NULL); if(INVALID_HANDLE_VALUE==pipe) { MessageBox("管道创建失败"); pipe=NULL; return; } HANDLEevent; event=CreateEvent(NULL,TRUE,FALSE,NULL)
5、; if(!event) { MessageBox("事件对象创建失败"); CloseHandle(pipe); pipe=NULL; return; } OVERLAPPEDoverlap; ZeroMemory(&overlap,sizeof(OVERLAPPED)); overlap.hEvent=event; ConnectNamedPipe(pipe,&overlap); //等待客户端连接 WaitForSingleObjec
6、t(event,INFINITE); }voidCThreadView::OnPipeRead(){ //TODO:Addyourcommandhandlercodehere charreadbuf[100]; DWORDdwread; ReadFile(pipe,readbuf,100,&dwread,NULL); MessageBox(readbuf); }voidCThreadView::OnPipeWrite(){ //TODO:Addyourcommandhandlercodehere charbuf[
7、]="你好,长江!"; DWORDdwwrite; WriteFile(pipe,buf,strlen(buf)+1,&dwwrite,NULL); } 2、为CChildView类添加代码 a、添加初始化代码CChildView::CChildView(){ //TODO:addconstructioncodehere pipe=NULL;}CChildView::~CChildView(){ if(pipe) CloseHandle(pipe);}
8、b、添加消息响应函数代码voidCChildView::OnConnect(){ //TODO:Addyourcommandhandlercodehere WaitNamedPipe("\\.\pipe\mypipe",NMPWAIT_WAIT_FOREVER); pipe=CreateFile"\\.\pipe\mypipe",GENERIC_READ
9、GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); }voidCChild
10、View::OnRead(){ //TODO:Addyourcommandhandlercodehere charreadbuf[100]; DWORDdwread; ReadFile(pipe,readbuf,100,&dwread,NULL); MessageBox(readbuf); }voidCChildView::O