版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
西安电子科技大学《操作系统原理》实验报告西安电子科技大学计算机学院实验报告题目:进程通信专业:计算机科学与技术姓名班级:031213学号:时间:2014年5月14日内容摘要:通信进程个数2采用的通信方式剪贴板Cliborad实验内容补充说明无一、分析和设计1.理论分析Windows剪贴板是一种开销较小的进程间通信机制,而且代码实现简单,但是稳定性欠佳。Windows系统支持剪贴板的基本机制是由系统预留的一块全局共享内存,用来暂存各个进程间进行交换的数据。提供数据的进程创建一个全局内存块,并将要传送的数据复制到该内存块,而接受数据的进程获取此内存块的句柄,并完成对该内存块的数据块的读取。2.总体设计利用Windows自带的剪贴板的功能,在VC6.0下建立俩个基于对话框的MFC程序,分别制作简单的图形界面,一个用来发送数据,一个用来接受数据。二、详细实现创建一个基于对话框的MFC工程取名为:Clipboard,在对话框资源上放置两个编辑框控件其ID分别为:IDC_EDIT_SEND和IDC_EDIT_RECV.再在这两个编辑框下方分别放置一个按钮,Caption属性分别设置为:“发送”和“接收”。ID分别设置为:IDC_BTN_SEND和IDC_BTN_RECV.可以使用剪贴板函数实现进程间的数据传输。常用的剪贴板函数有://打开剪贴板BOOLOpenClipboard();//关闭剪贴板BOOLCloseClipboard();//清空剪贴板,并将所有权分配给打开剪贴板的进程BOOLEmptyClipboard();//按指定数据格式放置剪贴板数据,用之前必须使用OpenClipboard函数HANDLESetClipboardData(UINTuFormat,HANDLEhMem);//检测是否已经包含了所需要的数据BOOLIsClipboardFormatAvailable(UINTuFormat);//获取指定剪贴板数据HANDLEGetClipboardData(UINTuFormat);其中uFormat为剪贴板格式,见MSDN(微软开发者网络)描述,hMem为所申请的内存控制句柄。我们这里实现采用的是CF_TEXT的字符串的剪贴板。三、实验结果利用剪贴板实现了进程间的通信。四、心得体会1.进程间的通信可以有11种实现方式,我们较多使用的是剪贴板,匿名管道,命名管道和、邮槽这四种方式。本次实验是我第一次使用MFC,初步掌握了MFC的一些编程方法。2.在本次实验实现时,我主要参考了孙鑫VC++视频中的第17讲,和网上的一篇关于进程通信blog(/czjxy881/article/category/1397570)。3.本次实验是由本人独立完成,对Windows下的剪贴板API有所了解。4.在之后我会用更多的方式来实现进程的通信,除了上述4种,还会学习共享内存,消息缓冲等方式。提高自己对OS的认识。五、附录核心代码:voidCTest01Dlg::OnBtnSend(){ //TODO:Addyourcontrolnotificationhandlercodehere //TODO:Addyourcontrolnotificationhandlercodehere if(OpenClipboard())//能否打开剪贴板 {CStringstr; HANDLEhClip;//句柄 char*pBuf; EmptyClipboard();//清空剪贴板,当前窗口为拥有者GetDlgItemText(IDC_EDIT_SEND,str); hClip=GlobalAlloc(GMEM_MOVEABLE,str.GetLength()+1);//多分配一个字节,防止丢失数据 //得到句柄 pBuf=(char*)GlobalLock(hClip);//加锁 strcpy(pBuf,str);//复制到内存 GlobalUnlock(hClip);//解锁 SetClipboardData(CF_TEXT,hClip);//文本格式 CloseClipboard();//关闭剪贴板 }}voidCTest01Dlg::OnBtnRecv(){ //TODO:Addyourcontrolnotificationhandlercodehere if(OpenClipboard())//能否打开剪贴板 { if(IsClipboardFormatAvailable(CF_TEXT))//判断是否可用 { HANDLEhClip; char*pBuf; hClip=GetClipboardData(CF_TEXT); pBuf=(char*)GlobalLock(hClip);//句柄转化为地址 GlobalUnlock(hClip);//解锁 SetDlgItemText(IDC_EDIT_RECV,pBuf);//将剪贴板的数据放入接受编辑框内 CloseClipboard();//关闭剪贴板 } }}完全代码我已经贴在网上,点击一下链接可看到/7461716/全部代码://test01Dlg.cpp:implementationfile//#include"stdafx.h"#include"test01.h"#include"test01Dlg.h"#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#endif///////////////////////////////////////////////////////////////////////////////CAboutDlgdialogusedforAppAboutclassCAboutDlg:publicCDialog{public: CAboutDlg();//DialogData //{{AFX_DATA(CAboutDlg) enum{IDD=IDD_ABOUTBOX}; //}}AFX_DATA //ClassWizardgeneratedvirtualfunctionoverrides //{{AFX_VIRTUAL(CAboutDlg) protected: virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDVsupport //}}AFX_VIRTUAL//Implementationprotected: //{{AFX_MSG(CAboutDlg) //}}AFX_MSG DECLARE_MESSAGE_MAP()};CAboutDlg::CAboutDlg():CDialog(CAboutDlg::IDD){ //{{AFX_DATA_INIT(CAboutDlg) //}}AFX_DATA_INIT}voidCAboutDlg::DoDataExchange(CDataExchange*pDX){ CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CAboutDlg) //}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CAboutDlg,CDialog) //{{AFX_MSG_MAP(CAboutDlg) //Nomessagehandlers //}}AFX_MSG_MAPEND_MESSAGE_MAP()///////////////////////////////////////////////////////////////////////////////CTest01DlgdialogCTest01Dlg::CTest01Dlg(CWnd*pParent/*=NULL*/) :CDialog(CTest01Dlg::IDD,pParent){ //{{AFX_DATA_INIT(CTest01Dlg) //NOTE:theClassWizardwilladdmemberinitializationhere //}}AFX_DATA_INIT //NotethatLoadIcondoesnotrequireasubsequentDestroyIconinWin32 m_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);}voidCTest01Dlg::DoDataExchange(CDataExchange*pDX){ CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CTest01Dlg) //NOTE:theClassWizardwilladdDDXandDDVcallshere //}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CTest01Dlg,CDialog) //{{AFX_MSG_MAP(CTest01Dlg) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_BtnSend,OnBtnSend) ON_BN_CLICKED(IDC_BtnRecv,OnBtnRecv) //}}AFX_MSG_MAPEND_MESSAGE_MAP()///////////////////////////////////////////////////////////////////////////////CTest01DlgmessagehandlersBOOLCTest01Dlg::OnInitDialog(){ CDialog::OnInitDialog(); //Add"About..."menuitemtosystemmenu. //IDM_ABOUTBOXmustbeinthesystemcommandrange. ASSERT((IDM_ABOUTBOX&0xFFF0)==IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX<0xF000); CMenu*pSysMenu=GetSystemMenu(FALSE); if(pSysMenu!=NULL) { CStringstrAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if(!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu); } } //Settheiconforthisdialog.Theframeworkdoesthisautomatically //whentheapplication'smainwindowisnotadialog SetIcon(m_hIcon,TRUE); //Setbigicon SetIcon(m_hIcon,FALSE); //Setsmallicon //TODO:Addextrainitializationhere returnTRUE;//returnTRUEunlessyousetthefocustoacontrol}voidCTest01Dlg::OnSysCommand(UINTnID,LPARAMlParam){ if((nID&0xFFF0)==IDM_ABOUTBOX) { CAboutDlgdlgAbout; dlgAbout.DoModal(); } else { CDialog::OnSysCommand(nID,lParam); }}//Ifyouaddaminimizebuttontoyourdialog,youwillneedthecodebelow//todrawtheicon.ForMFCapplicationsusingthedocument/viewmodel,//thisisautomaticallydoneforyoubytheframework.voidCTest01Dlg::OnPaint(){ if(IsIconic()) { CPaintDCdc(this);//devicecontextforpainting SendMessage(WM_ICONERASEBKGND,(WPARAM)dc.GetSafeHdc(),0); //Centericoninclientrectangle intcxIcon=GetSystemMetrics(SM_CXICON); intcyIcon=GetSystemMetrics(SM_CYICON); CRectrect; GetClientRect(&rect); intx=(rect.Width()-cxIcon+1)/2; inty=(rect.Height()-cyIcon+1)/2; //Drawtheicon dc.DrawIcon(x,y,m_hIcon); } else { CDialog::OnPaint(); }}//Thesystemcallsthistoobtainthecursortodisplaywhiletheuserdrags//theminimizedwindow.HCURSORCTest01Dlg::OnQueryDragIcon(){ return(HCURSOR)m_hIcon;}voidCTest01Dlg::OnBtnSend(){ //TODO:Addyourcontrolnotificationhandlercodehere //TODO:Addyourcontrolnotificationhandlercodehere if(OpenClipboard())//能否打开剪贴板 {CStringstr; HANDLEhClip;//句柄 char*pBuf; Empt
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工装夹具管理制度
- 电梯维保人员试题
- 肝胆外科考试题库及答案
- 顶板事故演练方案
- 防静电应急预案
- 防水工技能试题
- 耳穴贴压考试试题及答案
- 玻璃钢操作工考试试题
- 财经纪律执行不严格整改措施及成效
- 初级冲压工技能考核题集及答案
- 抗美援朝纪念日致敬英雄课件
- 2026年成都市金堂县增量政策性岗位招募(121人)笔试备考试题及答案详解
- 肾结石内科管理中国指南(2026版)
- 第四单元 第1课时 青蛙歌(教学设计)数学北师大版五年级上册2026秋
- 2026中国零碳产业园能源系统设计与投资回报分析报告
- GB/T 18474-2026交联聚乙烯(PE-X)管材与管件交联度的试验方法
- CSCO神经内分泌肿瘤诊疗指南(2026版)
- 2026年保密教育线上培训考试试题(附完整答案)
- (2026版)《超龄劳动者基本权益保障暂行规定》解读课件
- 老年综合评估试题及答案
- 计算机组装与维护(第2版)全套课件
评论
0/150
提交评论