文档详情

操作系统大作业.doc

发布:2017-02-27约7.55千字共11页下载文档
文本预览下载声明
实验一:获得当前系统中正在运行的所有进程的优先级 程序源代码: #includewindows.h #includetlhelp32.h #includeiostream using std::cout; using std::endl; void main(){ //初始化放进程信息的结构体 PROCESSENTRY32 PR; ::ZeroMemory(PR,sizeof(PR)); PR.dwSize=sizeof(PR); //获得进程快照 HANDLE JinCKZ=::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); //获取进程信息并输出 BOOL ToF=::Process32First(JinCKZ,PR);//第一个进程 while(ToF){ HANDLE XinXi=::OpenProcess(PROCESS_QUERY_INFORMATION,FALSE,PR.th32ProcessID); if(XinXi!=NULL){ DWORD YouXJ=::GetPriorityClass(XinXi); //输信息 cout进程ID: PR.th32ProcessID进程优先级:; switch(YouXJ){ case HIGH_PRIORITY_CLASS: coutHIGHendl; break; case NORMAL_PRIORITY_CLASS: coutNORMALendl; break; case IDLE_PRIORITY_CLASS: coutIDLEendl; break; case REALTIME_PRIORITY_CLASS: coutREALTIMEendl; break; default: coutUNKNOWNendl; break; } ::CloseHandle(XinXi); } //转向下进程 ToF=::Process32Next(JinCKZ,PR); } } 对程序的分析: 该程序思路是先获得所有进程的快照,然后逐个将进程的信息放入结构体中,然后将其输出。关键的API为:1.CreateToolhelp32Snapshot()作用为进程拍快照。2 .Process32First()作用为得到第一个进程。3. OpenProcess()打开进程。4. GetPriorityClass()作用为获取优先级。5. CloseHandle()作用为关闭句柄。 实验三:使用互斥对象实现线程同步 两个线程对同一个变量进行访问,其中一个线程对变量做加1操作,一个线程对其做减1操作。改变其数值后将该数值写入输出流中 分析:不作同步操作和采用同步操作将分别出现什么现象 程序源代码: #includeWindows.h #includeiostream using namespace std; long val=0; //共享变量 HANDLE hMutex=NULL; //互斥对象 //进程函数 DWORD WINAPI WorkThread1(LPVOID lParam) { WaitForSingleObject(hMutex,INFINITE); //获取互斥对象 val=val+1; (hMutex); //释放互斥对象 return val; } DWORD WINAPI WorkThread2(LPVOID lParam) { WaitForSingleObject(hMutex,INFINITE); val=val-1; ReleaseMutex(hMutex); return val; } void main() { HANDLE hThread1=CreateThread(NULL,0,WorkThread1,NULL,0,NULL); //创建线程 WaitForMultipleObjects(1,hThread1,TRUE,INFINITE); //等待线程结束 coutvalendl; HANDLE hThread2=CreateThread(NULL,0,WorkThread2,NULL,0,NULL); WaitForMultipleObjects(1,hThread2,TRUE,INFINITE); coutvalendl; CloseHandle(hThread1); //关句柄 CloseHandle(hThread2); CloseHandle(hMutex); } 对程序的分析:
显示全部
相似文档