Windows系统编程之进程间通信.rtf
《Windows系统编程之进程间通信.rtf》由会员分享,可在线阅读,更多相关《Windows系统编程之进程间通信.rtf(5页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Windows 系统编程之进程间通信 看雪技术论坛 编程开发 Win32/Win64 编程 Windows 系统编程之进程间通信 二、命名管道 命名管道具有以下几个特征:(1)命名管道是双向的,所以两个进程可以通过同一管道进行交互。(2)命名管道不但可以面向字节流,还可以面向消息,所以读取进程可以读取写进程发送的不同长度的消息。(3)多个独立的管道实例可以用一个名称来命名。例如几个客户端可以使用名称相同的管道与同一个服务器进行并发通信。(4)命名管道可以用于网络间两个进程的通信,而其实现的过程与本地进程通信完全一致。实验目标:在客户端输入数据 a 和 b,然后发送到服务器并计算 a+b,然后把
2、计算结果发送到客户端。可以多个客户端与同一个服务器并行通信。界面设计:难点所在:实现的过程比较简单,但有一个难点。原本当服务端使用 ConnectNamedPipe函数后,如果有客户端连接,就可以直接进行交互。原来我在实现过程中,当管道空闲时,管道的线程函数会无限(INFINITE)阻塞。若现在需要停止服务,就必须结束所有的线程,TernimateThread 可以作为一个结束线程的方法,但我基本不用这个函数。一旦使用这个函数之后,目标线程就会立即结束,但如果此时的目标线程正在操作互斥资源、内核调用、或者是操作共享 DLL 的全局变量,可能会出现互斥资源无法释放、内核异常等现象。这里我用重叠
3、I/0 来解决这个问题,在创建 PIPE 时使用 FILE_FLAG_OVERLAPPED 标志,这样使用ConnectNamedPipe 后会立即返回,但线程的阻塞由等待函数 WaitForSingleObject 来实现,等待 OVERLAPPED 结构的事件对象被设置。客户端主要代码:代码:void CMyDlg:OnSubmit()/打开管道 HANDLE hPipe=CreateFile(.PipeNamedPipe,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);if(hPipe
4、=INVALID_HANDLE_VALUE)this-MessageBox(打开管道失败,服务器尚未启动,或者客户端数量过多);return;DWORD nReadByte,nWriteByte;char szBuf1024=0;/把两个整数(a,b)格式化为字符串 sprintf(szBuf,%d%d,this-nFirst,this-nSecond);/把数据写入管道 WriteFile(hPipe,szBuf,strlen(szBuf),&nWriteByte,NULL);memset(szBuf,0,sizeof(szBuf);/读取服务器的反馈信息 ReadFile(hPipe,sz
5、Buf,1024,&nReadByte,NULL);/把返回信息格式化为整数 sscanf(szBuf,%d,&(this-nResValue);this-UpdateData(false);CloseHandle(hPipe);服务端主要代码:代码:/启动服务void CMyDlg:OnStart()CString lpPipeName=.PipeNamedPipe;for(UINT i=0;i MessageBox(创建管道错误!);return;/为每个管道实例创建一个事件对象,用于实现重叠 IO PipeInsti.hEvent =CreateEvent(NULL,false,fals
6、e,false);/为每个管道实例分配一个线程,用于响应客户端的请求 PipeInsti.hTread=AfxBeginThread(ServerThread,&PipeInsti,THREAD_PRIORITY_NORMAL);this-SetWindowText(命名管道实例之服务器(运行);this-MessageBox(服务启动成功);/停止服务void CMyDlg:OnStop()DWORD dwNewMode=PIPE_TYPE_BYTE|PIPE_READMODE_BYTE|PIPE_NOWAIT;for(UINT i=0;i SetWindowText(命名管道实例之服务器)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Windows 系统 编程 进程 通信
限制150内