vc++环境下利用管道与线程实现进程间通信

vc++环境下利用管道与线程实现进程间通信

ID:20300819

大小:38.50 KB

页数:10页

时间:2018-10-12

vc++环境下利用管道与线程实现进程间通信_第1页
vc++环境下利用管道与线程实现进程间通信_第2页
vc++环境下利用管道与线程实现进程间通信_第3页
vc++环境下利用管道与线程实现进程间通信_第4页
vc++环境下利用管道与线程实现进程间通信_第5页
资源描述:

《vc++环境下利用管道与线程实现进程间通信》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、vc++环境下利用管道和线程实现进程间通信VC++环境下利用管道和线程实现进程间通信电子部第二十八研究所一部张杰一.引言----Windows95作为一个优先多任务操作系统,其重要特征之一是引入了多进程和多线程机制。其中每个进程都有私有的虚拟地址空间,可以创建多个线程,每个线程被分配一个时间片,且当前执行的线程在其时间片耗尽时挂起,让其他线程运行。由于各时间片很小,所以这时看起来就象是多个线程在同时工作。我们这里将会在子进程Child中产生一个工作线程,它只在后台处理任务,而不会影响程序的使用。----有时用户运行的进程之间毫无关系,但是进程之间信息的交换则能产生协作效果,这

2、样就可以完成某些单个进程所不能完成的任务。Windows95可以使用多种通信手段,包括剪贴板、DDE、OLE,而且还增加了一些新的手段,其中管道是用来在不同程序之间交换信息的另一个新的简便的通信机制。与其它手段不同,管道没有正式的标准或协议来控制信息传递,所以与DDE会话这样的机制相比,管道更易于使用、更加灵活。管道实际上是一段共享内存区,进程把共享消息放在那里。因为管道专用于进程间的通信,所以Win32API提供了一组函数以方便信息交换。----本文我们将在VC++4.1环境下介绍一个父进程和其子进程的通信实例。在父进程Parent窗口中按一下鼠标左键,就会产生一个Pipe

3、和启动子进程Child,并从Pipe一端发送信息,同时Child启动后会创建一个工作线程,专门用来从管道的另一端读入数据。通过父进程菜单项的控制来改变图形形状参数,并传给Child使之在自己的窗口中绘出响应的图形。下面分别就父进程Parent和子进程Child来进行说明。二.父进程Parent----在父进程Parent中,我们将创建管道和启动子进程。首先说明几个相关函数。创建进程函数:BOOLCreateProcess(LPCTSTRlpApplicationName,//应用模式指针LPTSTRlpCommandLine,//命令行字符串LPSECURITY_ATTRIB

4、UTESlpProcessAttributes,//进程安全性指针LPSECURITY_ATTRIBUTESlpThreadAttributes,//主线程安全性指针BOOLbInheritHandles,//是否继承句柄DWORDdwCreationFlags,//进程类型与优先级LPVOIDlpEnvironment,//环境块指针LPCTSTRlpCurrentDirectory,//当前目录LPSTARTUPINFOlpStartupInfo,//STARTUPINFO结构指针LPPROCESS_INFORMATIONlpProcessInformation//);/

5、/新进程信息创建管道函数:BOOLCreatePipe(PHANDLEhReadPipe,//读句柄变量地址PHANDLEhWritePipe,//写句柄变量地址LPSECURITY_ATTRIBUTESlpPipeAttributes,//安全属性指针DWORDnSize);//管道缓冲区大小写管道函数:BOOLWriteFile(HANDLEhFile,//写入文件句柄LPCVOIDlpBuffer,//写入数据指针DWORDnNumberOfBytesToWrite,//要写入字节数量LPDWORDlpNumberOfBytesWritten,//已写入字节数地址LPO

6、VERLAPPEDlpOverlapped);//异步I/O结构指针----下面从编程角度讨论其实现步骤:----1.利用AppWizard(EXE)产生Parent应用框架,然后再文件Parentview.cpp头部加入#include,其中文件global.h定义了两个进程用于相互通信的结构和常量值。代码如下://////////////////Global.h共享变量头文件typedefstructFigure{intiShape;//图形控制参数}FIGURE,*PFIGURE;#defineID_RECT32771#defineID_ELLIPSE32772#def

7、ineID_TERMINATE32773----2.使用ClassWizard工具:选择对应于CParentView类的消息WM_LBUTTONDOWN,选择AddFunction键,增加函数OnLButtonDown()。在主菜单资源中加入Rect、Ellipse、Terminate菜单项,ID分别为IDC_RECT、IDR_ELLIPSE、IDR_TERMINATE,并在ClassWizard中加入相应函数。在文件Parentview.h中加入如下代码:public:BOOLSendCommand(

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。