操作系统大作业.doc
文本预览下载声明
实验一:获得当前系统中正在运行的所有进程的优先级
程序源代码:
#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);
}
对程序的分析:
显示全部