《windows程序设计》实验指导书_第1页
《windows程序设计》实验指导书_第2页
《windows程序设计》实验指导书_第3页
《windows程序设计》实验指导书_第4页
《windows程序设计》实验指导书_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

《windows程序设计》试验指导书计算机专业试验中心2023.05目录\l“_TOC_250019“试验一、进程试验 3\l“_TOC_250018“创立一个进程来运行一个应用程序 3\l“_TOC_250017“一、目的 3\l“_TOC_250016“二、试验内容 3\l“_TOC_250015“三、试验步骤: 3\l“_TOC_250014“进程掌握实践 4\l“_TOC_250013“试验二、线程试验 10\l“_TOC_250012“试验三、调整线程优先级 20\l“_TOC_250011“一、目的 20\l“_TOC_250010“二、试验内容 20\l“_TOC_250009“三、参考试验步骤: 21\l“_TOC_250008“第四次试验内存试验 22\l“_TOC_250007“、Windows虚拟内存试验 22\l“_TOC_250006“一、试验目的 22\l“_TOC_250005“二、试验工具 22\l“_TOC_250004“三、预备学问 22\l“_TOC_250003“四、试验内容 22\l“_TOC_250002“、可选试验 30\l“_TOC_250001“、超星上的内存治理试验 36\l“_TOC_250000“、超星上的共享内存试验 41创立一个进程来运行一个应用程序把握CreateProcess函数各个参数的使用方法.二、试验内容使用该函数创立一个进程〔通过调用 Windows配备的应用程序附件如calc.exe等表达〕三、试验步骤:NewProjectsMFCAppWizard〔exe的对话框中,选“根本对话框“,然后点击完成。在对话框中添加一个按钮“计算器“设“计算器”子菜单名为ID_RUN_CAL;数中写入相应代码,如:STARTUPINFOsi={sizeof(si)};TCHARszPath[MAX_PATH]=TEXT(“C:\\windows\\system32\\calc.exe“);SECURITY_ATTRIBUTESsaProcess,saThread;//定义进程对象和线程对象的安全性属性PROCESS_INFORMATIONpiProcessB;//定义创立进程的信息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);//saProcesssaThreadNULL。buildexecute点击“计算器”按钮,将创立一个进程来运行计算器应用程序。同理的方法可以翻开我们计算机上安装的其他软件!进程掌握实践试验三、调整线程优先级一、目的把握线程优先级的处理。二、试验内容vc++MFC〔他们生成时间的先后〕其中:按钮创立三个线程是同时创立三个线程,并设置优先权,他们执行的进度通过右边的三个进度条显示出来;按钮制止调整按钮优先级是对优先级的制止,当按下它后,右边的进度条应当就没有那么分级明显;3分别单独掌握进度条;三个编辑框是动态显示进程执行的状况。SetProcessPriorityBoost函数来制止系统动态调整该进程中全部线程的优先级;通过调用SetThreadPriority〔SetPriorityClass调整各线程的优先级;然后通过一个进度条来显示各线程的运行进度;三、参考试验步骤:程序工程〔在ProjectSettings对话框,C/C++选项卡上,CodeGenerationUserun-timelibrary组合框中选定“MultithreadedDL〕布局如下图。创立线程函数,来完成一些工作。如:unsigned stdcallThreadFunc(PVOIDpvParam){DWORDi=0;while(i<100000000)i++;_endthreadex(0);return(0);}制止系统动态调整该进程中全部线程的优先级。如:SetProcessPriorityBoost(GetCurrentProcess,FALSE);创立多个线程。如:HANDLEthread1,thread2,thread3;unsignedthreadID;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<process.h>。调整各线程的优先级。如:SetThreadPriority(thread1,THREAD_PRIORITY_LOWEST);SetThreadPriority(thread2,THREAD_PRIORITY_NORMAL);SetThreadPriority(thread3,THREAD_PRIORITY_HIGHEST);通过进度条来显示各线程的运行进度;参见ftp://s@23/windows程序设计/《参考资料》里面的进度条的制作第四次试验内存试验、Windows虚拟内存试验一、试验目的Windows虚拟内存的根本信息Windows虚拟内存的构造信息二、试验工具一台WindowsXP操作系统的计算机。计算机装有MicrosoftVisualStudioC++6.0专业版或企业版三、预备学问Windows虚拟内存API。安排页方法四、试验内容虚拟内存的检测:利用VirtualQueryEx函数来检查虚拟内存空间。步骤一:进入WindowsXP。步骤二:进入MicrosoftVisualStudioC++6.01.cpp。步骤四:将下面的程序源代码输入。步骤五:单击BuildCompile1.cpp,并单击“是”按钮。步骤六:假设没有错误,则单击“执行”按钮,即可看到结果。输入以下源代码:#include<windows.h>#include<iostream>#include<shlwapi.h>#include<iomanip>#include<stdio.h>#pragmacomment(lib,“shlwapi.lib“)//以可读方式对用户显示保护的关心方法//保护标记表示允许应用程序对内存进展访问的类型//以及操作系统强制访问的类型inlineboolTestSet(DWORDdwTarget,DWORDdwMask){return((dwTarget&dwMask)==dwMask);}#defineSHOWMASK(dwTarget,type)\if(TestSet(dwTarget,_##type))\{std::cout<<“,“<<#type;}voidShowProtection(DWORDdwTarget){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);}//遍历整个虚拟内存并对用户显示其属性的工作程序的方法voidWalkVM(HANDLEhProcess){//首先,获得系统信息SYSTEM_INFOsi;::ZeroMemory(&si,sizeof(si));::GetSystemInfo(&si);//安排要存放信息的缓冲区MEMORY_BASIC_INFORMATIONmbi;::ZeroMemory(&mbi,sizeof(mbi));//循环整个应用程序地址空间LPCVOIDpBlock=(LPVOID)si.lpMinimumApplicationAddress;while(pBlock<si.lpMaximumApplicationAddress){//获得下一个虚拟内存块的信息if(::VirtualQueryEx(hProcess, //相关的进程pBlock, //开头位置&mbi, //缓冲区sizeof(mbi))==sizeof(mbi)) //大小确实认{//计算块的结尾及其大小LPCVOIDpEnd=(PBYTE)pBlock+mbi.RegionSize;TCHARszSize[MAX_PATH];::StrFormatByteSize(mbi.RegionSize,szSize,MAX_PATH);//显示块地址和大小std::cout.fill(”0”);std::cout<<std::hex<<std::setw(8)<<(DWORD)pBlock<<“-“<<std::hex<<std::setw(8)<<(DWORD)pEnd<<(::strlen(szSize)==7?“(“:“(“)<<szSize<<“)“;//显示块的状态switch(mbi.State){caseMEM_COMMIT:std::cout<<“Committed“;break;caseMEM_FREE:std::cout<<“Free“;break;caseMEM_RESERVE:std::cout<<“Reserved“;break;}//显示保护if(mbi.Protect==0&&mbi.State!=MEM_FREE){mbi.Protect=_READONLY;}ShowProtection(mbi.Protect);//显示类型switch(mbi.Type){caseMEM_IMAGE:std::cout<<“,Image“;break;caseMEM_MAPPED:std::cout<<“,Mapped“;break;caseMEM_PRIVATE:std::cout<<“,Private“;break;}//检验可执行的影像TCHARszFilename[MAX_PATH];if(::GetModuleFileName((HMODULE)pBlock, //实际虚拟内存的模块句柄szFilename, //完全指定的文件名称MAX_PATH)>0) //实际使用的缓冲区大小{//除去路径并显示::PathStripPath(szFilename);std::cout<<“,Module:“<<szFilename;}std::cout<<std::endl;//移动块指针以获得下一个块pBlock=pEnd;}}}voidmain{//遍历当前进程的虚拟内存::WalkVM(::GetCurrentProcess);getchar;}编译后,运行结果如以下图:、可选试验虚拟内存的操作:的很小多一局部〔千分之一〕并加以利用。步骤一:进入WindowsXP。步骤二:进入MicrosoftVisualStudioC++6.02.cpp。步骤四:将下面的程序源代码输入。步骤五:单击BuildCompile1.cpp,并单击“是”按钮。步骤六:假设没有错误,则单击“执行”按钮,即可看到结果。输入以下源代码:#include<windows.h>#include<iostream>#include<stdio.h>//尝试以指定长度的零数字填充内存块的简便方法voidFillZero(LPVOIDpBlock,DWORDdwSize){_try{BYTE*arFill=(BYTE*)pBlock;for(DWORDdwFill=0;dwFill<dwSize;++dwFill){arFill[dwFill]=0;}std::cout<<“Memoryzeroed.“<<std::endl;}_except(EXCEPTION_EXECUTE_HANDLER){std::cout<<“Couldnotzeromemory.“<<std::endl;}}voidmain{//简洁的常数DWORDc_dwGigabyte=1<<30;//1GB块{LPVOIDpBlock=::malloc(c_dwGigabyte);::FillZero(pBlock,c_dwMegabyte);::free(pBlock);}//1GB{LPVOIDpBlock=::VirtualAlloc(NULL, //不指定起始地址c_dwGigabyte, //要求1GBM

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论