




已阅读5页,还剩39页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
windows程序设计实验指导书曾素华 编计算机专业实验中心2011.05目 录实验一、 进程实验31.1创建一个进程来运行一个应用程序3一、目 的3二、实验内容3三、实验步骤:31.2进程控制实践4实验二、 线程实验10实验三、调整线程优先级20一、目的20二、实验内容20三、参考实验步骤:21第四次实验 内存实验224.1、Windows虚拟内存实验22一、实验目的22二、实验工具22三、预备知识22四、实验内容224.2、可选实验304.3、超星上的内存管理实验364.4、超星上的共享内存实验41实验一、 进程实验1.1创建一个进程来运行一个应用程序一、目 的掌握CreateProcess函数各个参数的使用方法. 二、实验内容使用该函数创建一个进程(通过调用Windows配备的应用程序附件如calc.exe等体现)三、实验步骤:1) 使用Visual C+创建一个单文档GUI应用程序项目;可以在New Projects 选项卡上,选MFC AppWizard(exe)。在接下来的对话框中,选“基本对话框“,然后点击完成。2) 在对话框中添加一个按钮“计算器“(设“计算器”子菜单名为ID_RUN_CALC);3) 右键建立类向导,添加按钮“计算器“的单击事件函数,然后在相应的函数中写入相应代码,如: STARTUPINFO si = sizeof(si); TCHAR szPathMAX_PATH = TEXT(C:windowssystem32calc.exe); SECURITY_ATTRIBUTES saProcess, saThread; /定义进程对象和线程对象的安全性属性 PROCESS_INFORMATION piProcessB; /定义创建进程的信息 saProcess.nLength = sizeof(saProcess); saProcess.lpSecurityDescriptor = NULL; saProcess.bInheritHandle = TRUE; /设置进程安全属性 saThread.nLength = sizeof(saThread); saThread.lpSecurityDescriptor = NULL; saThread.bInheritHandle = FALSE; /设置线程安全属性 CreateProcess(NULL, szPath, &saProcess, &saThread, FALSE, 0, NULL, NULL, &si, &piProcessB);/上述代码可以简化,可将saProcess和saThread参数均设置为NULL。4) 书写完毕,进行build,然后execute 点击 “计算器”按钮,将创建一个进程来运行计算器应用程序。同理的方法可以打开我们计算机上安装的其他软件!1.2进程控制实践实验二、 线程实验实验三、调整线程优先级一、目的掌握线程优先级的处理。二、实验内容通过vc+的向导建立一个基于基本对话框的MFC应用程序,具体对话框布置如下图所示:(中间的那三个线程编辑框可以用静态的文本,但是用编辑框可以看得出他们生成时间的先后)其中:按钮创建三个线程是同时创建三个线程,并设置优先权,他们执行的进度通过右边的三个进度条显示出来;按钮禁止调整按钮优先级是对优先级的禁止,当按下它后,右边的进度条应该就没有那么分级明显;按钮创建线程1、创建线程2、创建线程3分别单独控制进度条;三个编辑框是动态显示进程执行的情况。提示:对于一个多线程应用程序,通过调用SetProcessPriorityBoost函数来禁止系统动态调整该进程中所有线程的优先级;通过调用SetThreadPriority函数(也可以结合使用SetPriorityClass函数),来调整各线程的优先级;然后通过一个进度条来显示各线程的运行进度; 三、参考实验步骤:1) 使用Visual C+创建一个支持多线程的MFC AppWizard(exe)应用程序项目(在Project Settings对话框,C/C+选项卡上,Code Generation类别,从Use run-time library组合框中选定“Multithreaded DLL”。)布局如图所示。2) 创建线程函数,来完成一些工作。如:unsigned _stdcall ThreadFunc(PVOID pvParam) DWORD i = 0;while (i100000000)i+;_endthreadex(0);return(0);3) 禁止系统动态调整该进程中所有线程的优先级。如:SetProcessPriorityBoost(GetCurrentProcess(), FALSE);4) 创建多个新线程。如:HANDLE thread1, thread2, thread3;unsigned threadID;thread1 = (HANDLE)_beginthreadex(NULL, 0, &ThreadFunc, NULL, 0, &threadID); thread2 = (HANDLE)_beginthreadex(NULL, 0, &ThreadFunc, NULL, 0, &threadID); thread3 = (HANDLE)_beginthreadex(NULL, 0, &ThreadFunc, NULL, 0, &threadID);注意:要先 #include 。5) 调整各线程的优先级。如:SetThreadPriority(thread1, THREAD_PRIORITY_LOWEST);SetThreadPriority(thread2, THREAD_PRIORITY_NORMAL);SetThreadPriority(thread3, THREAD_PRIORITY_HIGHEST);6)通过进度条来显示各线程的运行进度; 参见ftp:/s23/windows程序设计/参考资料里面的进度条的制作第四次实验 内存实验4.1、Windows虚拟内存实验一、实验目的(1) 了解Windows虚拟内存的基本信息(2) 了解Windows虚拟内存的结构信息二、实验工具(1)一台Windows XP操作系统的计算机。(2)计算机装有Microsoft Visual Studio C+6.0专业版或企业版三、预备知识(1)Windows虚拟内存API。(2)分配页方法四、实验内容虚拟内存的检测:利用VirtualQueryEx()函数来检查虚拟内存空间。步骤一:进入WindowsXP。步骤二:进入Microsoft Visual Studio C+6.0步骤三:在菜单栏中选择“文件”“新建”“文件”C+SourceFile,选择路径,并命名为1.cpp。步骤四:将下面的程序源代码输入。步骤五:单击BuildCompile 1.cpp,并单击“是”按钮。步骤六:若没有错误,则单击“执行”按钮,即可看到结果。输入以下源代码:#include#include#include#include#include#pragma comment(lib,shlwapi.lib)/以可读方式对用户显示保护的辅助方法/保护标记表示允许应用程序对内存进行访问的类型/以及操作系统强制访问的类型inline bool TestSet(DWORD dwTarget,DWORD dwMask) return(dwTarget&dwMask)=dwMask);#define SHOWMASK(dwTarget,type)if(TestSet(dwTarget,PAGE_#type)std:cout,#type;void ShowProtection(DWORD dwTarget) SHOWMASK(dwTarget,READONLY); SHOWMASK(dwTarget,GUARD); SHOWMASK(dwTarget,NOCACHE); SHOWMASK(dwTarget,READWRITE); SHOWMASK(dwTarget,WRITECOPY); SHOWMASK(dwTarget,EXECUTE); SHOWMASK(dwTarget,EXECUTE_READ); SHOWMASK(dwTarget,EXECUTE_READWRITE); SHOWMASK(dwTarget,EXECUTE_WRITECOPY); SHOWMASK(dwTarget,NOACCESS);/遍历整个虚拟内存并对用户显示其属性的工作程序的方法void WalkVM(HANDLE hProcess) /首先,获得系统信息SYSTEM_INFO si;:ZeroMemory(&si,sizeof(si);:GetSystemInfo(&si); /分配要存放信息的缓冲区MEMORY_BASIC_INFORMATION mbi;:ZeroMemory(&mbi,sizeof(mbi); /循环整个应用程序地址空间LPCVOID pBlock=(LPVOID)si.lpMinimumApplicationAddress;while(pBlocksi.lpMaximumApplicationAddress) /获得下一个虚拟内存块的信息if(:VirtualQueryEx(hProcess, /相关的进程pBlock, /开始位置&mbi, /缓冲区sizeof(mbi)=sizeof(mbi) /大小的确认 /计算块的结尾及其大小LPCVOID pEnd=(PBYTE)pBlock+mbi.RegionSize;TCHAR szSizeMAX_PATH;:StrFormatByteSize(mbi.RegionSize,szSize,MAX_PATH); /显示块地址和大小std:cout.fill(0);std:coutstd:hexstd:setw(8)(DWORD)pBlock-std:hexstd:setw(8)(DWORD)pEnd(:strlen(szSize)=7?(:()szSize); /显示块的状态switch(mbi.State) case MEM_COMMIT: std:coutCommitted; break; case MEM_FREE: std:coutFree; break; case MEM_RESERVE: std:coutReserved; break;/显示保护if(mbi.Protect=0&mbi.State!=MEM_FREE) mbi.Protect=PAGE_READONLY;ShowProtection(mbi.Protect);/显示类型switch(mbi.Type)case MEM_IMAGE: std:cout,Image; break; case MEM_MAPPED: std:cout,Mapped; break; case MEM_PRIVATE: std:cout0) /实际使用的缓冲区大小 /除去路径并显示:PathStripPath(szFilename);std:cout,Module:szFilename;std:coutstd:endl;/移动块指针以获得下一个块pBlock=pEnd;void main() /遍历当前进程的虚拟内存:WalkVM(:GetCurrentProcess();getchar();编译后,运行结果如下图:4.2、可选实验虚拟内存的操作:程序示例显示了如何分配一个大容量的空间,将物理存储委托给其中的很小多一部分(千分之一)并加以利用。步骤一:进入WindowsXP。步骤二:进入Microsoft Visual Studio C+6.0步骤三:在菜单栏中选择“文件”“新建”“文件”C+SourceFile,选择路径,并命名为2.cpp。步骤四:将下面的程序源代码输入。步骤五:单击BuildCompile 1.cpp,并单击“是”按钮。步骤六:若没有错误,则单击“执行”按钮,即可看到结果。输入以下源代码:#include#include#include/尝试以指定长度的零数字填充内存块的简便方法void FillZero(LPVOID pBlock,DWORD dwSize)_tryBYTE* arFill=(BYTE *)pBlock;for(DWORD dwFill=0;dwFilldwSize;+dwFill)arFilldwFill=0;std:coutMemory zeroed.std:endl;_except(EXCEPTION_EXECUTE_HANDLER)std:coutCould not zero memory.std:endl;void main() /简单的常数DWORD c_dwGigabyte=130;DWORD c_dwMegabyte=120;/使用内存分配来获得1GB块LPVOID pBlock=:malloc(c_dwGigabyte);:FillZero(pBlock,c_dwMegabyte);:free(pBlock);/使用虚拟分配以获得物理1GBLPVOID pBlock=:VirtualAlloc(NULL, /不指定起始地址c_dwGigabyte, /要求1GBMEM_COMMIT, /调配物理存储PAGE_READW
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中频炉生产线智能制造解决方案供应合同
- 2025年跨区域铁路货运保险合同中货物损失赔偿细则
- 2025年绿色物流配送中心员工聘用与环保供应链协同管理合同
- 2025年高端家电ODM合作开发与生产管理合同
- 2025年度农村自来水厂生活设施建设合作协议
- 2025年度新型医疗器械全国代理权授权与销售服务合同
- 2025年度离婚子女共同抚养权与监护责任分担协议(定制版)
- 2025年金融科技企业执行总经理职务合同书
- 2025年度高端商场珠宝区品牌合作门头广告设计执行合同
- 2025年新型餐饮连锁品牌网红店铺租赁合同书
- 《中国动漫发展史》课件
- 学校安保合同范本
- 六年级阅读题打印20篇
- 《液压传动》教案(劳动版)
- GB/T 32124-2024磷石膏的处理处置规范
- 集成光电子器件及设计-4集成光有源器件
- 2025届浙江省新英语高三第一学期期末教学质量检测试题含解析
- TCECA-G 0304-2024 数字化碳管理平台 总体框架
- DL∕T 976-2017 带电作业工具、装置和设备预防性试验规程
- 近几年大学英语四级词汇表(完整珍藏版)
- 儿科护理学教学案
评论
0/150
提交评论