




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、成绩:实 验 报 告课程名称:操作系统实验项目:windows进程管理姓 名:专 业:计算机科学与技术班 级:学 号:计算机科学与技术学院计算机系2019 年 4 月 23 日实验项目名称: windows进程管理 一、实验目的1. 学习windows系统提供的线程创建、线程撤销、线程同步等系统调用;2. 利用C+实现线程创建、线程撤销、线程同步程序;3. 完成思考、设计与练习。二、实验用设备仪器及材料1. Windows 7或10, VS2010及以上版本。三、实验内容1 线程创建与撤销写一个windows控制台程序(需要MFC),创建子线程,显示Hello, This is a Threa
2、d. 然后撤销该线程。相关系统调用:线程创建: CreateThread()线程撤销: ExitThread()线程终止: ExitThread(0)线程挂起: Sleep()关闭句柄: CloseHandle()参考代码:/ OS-TEST.cpp : 定义控制台应用程序的入口点。/#include stdafx.h#include OS-TEST.h#ifdef _DEBUG#define new DEBUG_NEW#endif/ 唯一的应用程序对象CWinApp theApp;using namespace std;void ThreadName1();int _tmain(int ar
3、gc, TCHAR* argv, TCHAR* envp)int nRetCode = 0;static HANDLE hHandle1=NULL;DWORD dwThreadID1;HMODULE hModule = :GetModuleHandle(NULL);if (hModule != NULL)/ 初始化 MFC 并在失败时显示错误if (!AfxWinInit(hModule, NULL, :GetCommandLine(), 0)/ TODO: 更改错误代码以符合您的需要_tprintf(_T(错误: MFC 初始化失败n);nRetCode = 1;else/ TODO: 在此
4、处为应用程序的行为编写代码。else/ TODO: 更改错误代码以符合您的需要_tprintf(_T(错误: GetModuleHandle 失败n);nRetCode = 1;hHandle1=CreateThread(LPSECURITY_ATTRIBUTES) NULL,0,(LPTHREAD_START_ROUTINE) ThreadName1,(LPVOID) NULL,0,&dwThreadID1);Sleep(5000);CloseHandle(hHandle1);ExitThread(0);/getchar();return nRetCode;void ThreadName1(
5、)printf(Hello, This is a Thread.);运行结果如图所示。完成以下设计题目:1. 向线程对应的函数传递参数,如字符串“hello world!”,在线程中显示。2. 如何创建3个线程A, B, C,并建立先后序执行关系ABC。实验内容2 线程同步完成父线程和子线程的同步。父线程创建子线程后进入阻塞状态,子线程运行完毕后再唤醒。相关系统调用:等待对象 WaitForSingleObject(), WaitForMultipleObjects();信号量对象 CreateSemaphore(), OpenSemaphore(), ReleaseSemaphore();
6、HANDLE WINAPI CreateSemaphore( _In_opt_ LPSECURITY_ATTRIBUTES lpSemaphoreAttributes _In_ LONG lInitialCount, _In_ LONG lMaximumCount, _In_opt_ LPCTSTR lpName );第一个参数:安全属性,如果为NULL则是默认安全属性第二个参数:信号量的初始值,要=0且=第三个参数第三个参数:信号量的最大值第四个参数:信号量的名称返回值:指向信号量的句柄,如果创建的信号量和已有的信号量重名,那么返回已经存在的信号量句柄参考代码:/ OS-TEST.cpp :
7、 定义控制台应用程序的入口点。/#include stdafx.h#include OS-TEST.h#ifdef _DEBUG#define new DEBUG_NEW#endif/ 唯一的应用程序对象CWinApp theApp;using namespace std;/void ThreadName1();static HANDLE h1;static HANDLE hHandle1=NULL;void func();int _tmain(int argc, TCHAR* argv, TCHAR* envp)int nRetCode = 0;DWORD dwThreadID1;DWORD
8、 dRes,err;/LPCWSTR lPCWSTR=SemaphoreName1;/hHandle1=CreateSemaphore(NULL,0,1, NULL); / CREATE A SEMAPHOREhHandle1=CreateSemaphore(NULL,0,1, LSemaphoreName1); / CREATE A SEMAPHOREif (hHandle1=NULL) printf(Semaphore create ERR!n);else printf(Semaphore create success!n);hHandle1=OpenSemaphore(SYNCHRONI
9、ZE|SEMAPHORE_MODIFY_STATE,NULL,LSemaphoreName1); /OPEN SEMAPHOREif (hHandle1=NULL) printf(Semaphore open ERR!n);else printf(Semaphore open success!n);h1=CreateThread(LPSECURITY_ATTRIBUTES)NULL,0,(LPTHREAD_START_ROUTINE)func,(LPVOID)NULL,0,&dwThreadID1); /CREATE CHILD THREADif (h1=NULL) printf(Thread
10、 create ERR!n);else printf(Thread create success!n);dRes=WaitForSingleObject(hHandle1,INFINITE); /WAIT FOR CHILD THREAD ENDerr=GetLastError();printf(Wait for single object ERR=%dn,err);if(dRes=WAIT_TIMEOUT)printf(TIMEOUT OF dRes=%dn,dRes);else if (dRes=WAIT_OBJECT_0) printf(WAIT_OBJECT dRes=%dn,dRes
11、);else if (dRes=WAIT_ABANDONED) printf(WAIT_ABANDONED dRes=%dn,dRes);else printf(dRes=%dn,dRes);CloseHandle(h1);CloseHandle(hHandle1);ExitThread(0);return nRetCode;void func()BOOL rc;DWORD err;printf(Now in Thread.n);rc=ReleaseSemaphore(hHandle1,1,NULL);err=GetLastError();printf(Release Semaphore er
12、r=%dn,err);if(rc=0) printf(Semaphore Release Fail.n);else printf(Semaphore Release Success. rc=%dn,rc);编译运行,结果如图所示。完成以下设计题目:3. 用信号量控制实现3个线程的同步,线程A释放信号量后执行B,B释放信号量后执行C。 四、实验结果实验内容11. 向线程对应的函数传递参数,如字符串“hello world!”,在线程中显示。结果:/ 66645.cpp : 定义?控?制?台应|用?程序的?入?口点?。/#include stdafx.h#include 66645.h#ifdef
13、 _DEBUG#define new DEBUG_NEW#endif/ 唯一?的?应|用?程序对?象CWinApp theApp;using namespace std;void ThreadName1();int _tmain(int argc, TCHAR* argv, TCHAR* envp)int nRetCode = 0;static HANDLE hHandle1=NULL;DWORD dwThreadID1;HMODULE hModule = :GetModuleHandle(NULL);if (hModule != NULL)/ 初?始?化 MFC 并在失败时显?示?错误if
14、(!AfxWinInit(hModule, NULL, :GetCommandLine(), 0)/ TODO: 更改?错误代码?以?符?合?您的?需要a_tprintf(_T(错误: MFC 初?始?化失败n);nRetCode = 1;else/ TODO: 在此?处|为a应|用?程序的?行D为a编写代码?。else/ TODO: 更改?错误代码?以?符?合?您的?需要a_tprintf(_T(错误: GetModuleHandle 失败n);nRetCode = 1;hHandle1=CreateThread(LPSECURITY_ATTRIBUTES) NULL,0,(LPTHREAD
15、_START_ROUTINE) ThreadName1,(LPVOID) NULL,0,&dwThreadID1);Sleep(5000);CloseHandle(hHandle1);ExitThread(0);/getchar();return nRetCode;void ThreadName1()printf(Hello, World.);2. 如何创建3个线程A, B, C,并建立先后序执行关系ABC。/ .cpp : 定义?控?制?台应|用?程序的?入?口点?。/#include stdafx.h#include .h#ifdef _DEBUG#define new DEBUG_NEW
16、#endif/ 唯一?的?应|用?程序对?象CWinApp theApp;using namespace std;void ThreadName1();void ThreadName2();void ThreadName3();static HANDLE h1;static HANDLE h2;static HANDLE h3;static HANDLE hHandle1 = NULL;static HANDLE hHandle2 = NULL;static HANDLE hHandle3 = NULL;int _tmain(int argc, TCHAR* argv, TCHAR* envp
17、)int nRetCode = 0;static HANDLE hHandle1 = NULL;static HANDLE hHandle2 = NULL;static HANDLE hHandle3 = NULL;DWORD dwThreadID1;HMODULE hModule = :GetModuleHandle(NULL);if (hModule != NULL)/ 初?始?化 MFC 并在失败时显?示?错误if (!AfxWinInit(hModule, NULL, :GetCommandLine(), 0)/ TODO: 更改?错误代码?以?符?合?您的?需要a_tprintf(_
18、T(错误: MFC 初?始?化失败n);nRetCode = 1;else/ TODO: 在此?处|为a应|用?程序的?行D为a编写代码?。else/ TODO: 更改?错误代码?以?符?合?您的?需要a_tprintf(_T(错误: GetModuleHandle失败n);nRetCode = 1;/char str = hello world!?;hHandle1 = CreateThread(LPSECURITY_ATTRIBUTES)NULL,0,(LPTHREAD_START_ROUTINE)ThreadName1,(LPVOID)NULL,/(LPVOID)str,0,&dwThr
19、eadID1);/Sleep(5000);hHandle2 = CreateThread(LPSECURITY_ATTRIBUTES)NULL,0,(LPTHREAD_START_ROUTINE)ThreadName2,(LPVOID)NULL,0,&dwThreadID1);/Sleep(5000);/CloseHandle(hHandle1);hHandle3 = CreateThread(LPSECURITY_ATTRIBUTES)NULL,0,(LPTHREAD_START_ROUTINE)ThreadName3,(LPVOID)NULL,0,&dwThreadID1);Sleep(1
20、000);/CloseHandle(hHandle2);CloseHandle(hHandle3);CloseHandle(hHandle2);CloseHandle(hHandle1);ExitThread(0);/getchar();return nRetCode;void ThreadName1()printf(Hello, This is a Thread A.n);/printf(%s, str);void ThreadName2()printf(This is a Thread B.n);void ThreadName3()printf(This is a Thread C.n);
21、实验内容22. 用信号量控制实现3个线程的同步,线程A释放信号量后执行B,B释放信号量后执行C。 / .cpp : 定义?控?制?台应|用?程序的?入?口点?。/#include stdafx.h#include .h#ifdef _DEBUG#define new DEBUG_NEW#endif/ 唯一?的?应|用?程序对?象CWinApp theApp;using namespace std;static HANDLE h1;static HANDLE h2;static HANDLE h3;static HANDLE hHandle1 = NULL;static HANDLE hHand
22、le2 = NULL;static HANDLE hHandle3 = NULL;void func();void fund();void fune();int _tmain(int argc, TCHAR* argv, TCHAR* envp)int nRetCode = 0;DWORD dwThreadID1;DWORD dRes, err;/LPCWSTR lPCWSTR=SemaphoreName1;/hHandle1=CreateSemaphore(NULL,0,1, NULL); / CREATE A SEMAPHOREhHandle1 = CreateSemaphore(NULL
23、, 0, 1, LSemaphoreName1); / CREATE A SEMAPHOREif (hHandle1 = NULL) printf(Semaphore create ERR!n);else printf(Semaphore create success!n);hHandle1 = OpenSemaphore(SYNCHRONIZE | SEMAPHORE_MODIFY_STATE,NULL,LSemaphoreName1); /OPEN SEMAPHOREif (hHandle1 = NULL) printf(Semaphore open ERR!n);else printf(
24、Semaphore open success!n);h1 = CreateThread(LPSECURITY_ATTRIBUTES)NULL,0,(LPTHREAD_START_ROUTINE)func,(LPVOID)NULL,0,&dwThreadID1); /CREATE CHILD THREADif (h1 = NULL) printf(Thread create ERR!n);else printf(Thread create success!n);dRes = WaitForSingleObject(hHandle1, INFINITE); /WAIT FOR CHILD THRE
25、AD ENDerr = GetLastError();printf(Wait for single object ERR=%dn, err);if (dRes = WAIT_TIMEOUT)printf(TIMEOUT OF dRes=%dn, dRes);else if (dRes = WAIT_OBJECT_0) printf(WAIT_OBJECT dRes=%dn, dRes);else if (dRes = WAIT_ABANDONED) printf(WAIT_ABANDONED dRes=%dn, dRes);else printf(dRes=%dn, dRes);CloseHa
26、ndle(h1);CloseHandle(hHandle1);hHandle2 = CreateSemaphore(NULL, 0, 1, LSemaphoreName2); / CREATE A SEMAPHOREif (hHandle2 = NULL) printf(Semaphore create ERR!n);else printf(Semaphore create success!n);hHandle2 = OpenSemaphore(SYNCHRONIZE | SEMAPHORE_MODIFY_STATE, NULL, LSemaphoreName2); /OPEN SEMAPHO
27、REif (hHandle2 = NULL) printf(Semaphore open ERR!n);else printf(Semaphore open success!n);h2 = CreateThread(LPSECURITY_ATTRIBUTES)NULL, 0, (LPTHREAD_START_ROUTINE)fund, (LPVOID)NULL, 0, &dwThreadID1); /CREATE CHILD THREADif (h2 = NULL) printf(Thread create ERR!n);else printf(Thread create success!n)
28、;dRes = WaitForSingleObject(hHandle2, INFINITE); /WAIT FOR CHILD THREAD ENDerr = GetLastError();printf(Wait for single object ERR=%dn, err);if (dRes = WAIT_TIMEOUT)printf(TIMEOUT OF dRes=%dn, dRes);else if (dRes = WAIT_OBJECT_0) printf(WAIT_OBJECT dRes=%dn, dRes);else if (dRes = WAIT_ABANDONED) prin
29、tf(WAIT_ABANDONED dRes=%dn, dRes);else printf(dRes=%dn, dRes);CloseHandle(h2);CloseHandle(hHandle2);hHandle3 = CreateSemaphore(NULL, 0, 1, LSemaphoreName3); / CREATE A SEMAPHOREif (hHandle3 = NULL) printf(Semaphore create ERR!n);else printf(Semaphore create success!n);hHandle3 = OpenSemaphore(SYNCHR
30、ONIZE | SEMAPHORE_MODIFY_STATE, NULL, LSemaphoreName3); /OPEN SEMAPHOREif (hHandle3 = NULL) printf(Semaphore open ERR!n);else printf(Semaphore open success!n);h3 = CreateThread(LPSECURITY_ATTRIBUTES)NULL, 0, (LPTHREAD_START_ROUTINE)fune, (LPVOID)NULL, 0, &dwThreadID1); /CREATE CHILD THREADif (h3 = NULL) printf(Thread create ERR!n);else printf(Thread create success!n);dRes = WaitForSingleObject(hHandle3, INFINITE); /WAIT FOR CHILD THREAD ENDerr = GetLastError();printf(Wait for single object ERR=%dn, err);if (dRes = WAIT_
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农村林地资源利用与林业开发合同
- 产品加工买卖合同
- 资料员年度工作总结范文(30篇)
- 合作社帮扶农民合作社互助合作协议
- 宜宾五粮液股份有限公司2025年上半年校园招聘(253人)笔试参考题库附带答案详解
- 2025鄂尔多斯市准格尔黄河大峡谷文化旅游有限公司招聘24人笔试参考题库附带答案详解
- 2025福建福州市建筑设计院有限责任公司招聘22人笔试参考题库附带答案详解
- 2025江苏苏州市苏惠优达供应链管理有限公司紧急招聘4人笔试参考题库附带答案详解
- 2025山西国际能源集团社会招聘258人笔试参考题库附带答案详解
- 2025安徽芜湖宜居投资(集团)有限公司子公司人员招聘10人笔试参考题库附带答案详解
- 文艺复兴史学习通超星课后章节答案期末考试题库2023年
- 《BIM技术概论》期末试卷及答案2套
- 城市设计原理-西安建筑科技大学中国大学mooc课后章节答案期末考试题库2023年
- 初中生物理自主学习能力现状的调查研究的开题报告
- 委派合同范本
- 嵩县天运矿业有限责任公司石盘沟金矿矿山地质环境保护与土地复垦方案
- 丝路神话-“一带一路”沿线古今漫谈知到章节答案智慧树2023年黑龙江林业职业技术学院
- 乡村规划与设计教材课件
- 2023年高考-汉语文试卷及答案
- 【小区植物配置情况调研分析8500字(论文)】
- 航空油料特种设备修理员-航空油料特种设备修理员精选试题
评论
0/150
提交评论