ImageVerifierCode 换一换
格式:DOC , 页数:26 ,大小:167.54KB ,
资源ID:3186637      下载积分:10 金币
验证码下载
登录下载
邮箱/手机:
图形码:
验证码: 获取验证码
温馨提示:
支付成功后,系统会自动生成账号(用户名为邮箱或者手机号,密码是验证码),方便下次登录下载和查询订单;
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/3186637.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请。


权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4009-655-100;投诉/维权电话:18658249818。

注意事项

本文(2023年windows进程管理实验报告.doc)为本站上传会员【精****】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

2023年windows进程管理实验报告.doc

1、 成绩: 实 验 报 告 课程名称: 操作系统 试验项目: windows进程管理 姓 名: 专 业: 计算机科学与技术 班 级: 学 号: 计算机科学与技术学院 计算机系 2023 年 4 月 23 日 试验项目名称: windows进程管理 一、试验目旳 1. 学习windows系统提供旳线程创立、线程撤销、线程同步等系统调用; 2. 运用C++实现线程创立、线程撤销、线程同步程序; 3. 完毕思索、设计

2、与练习。 二、试验用设备仪器及材料 1. Windows 7或10, VS2023及以上版本。 三、试验内容 1 线程创立与撤销 写一种windows控制台程序(需要MFC),创立子线程,显示Hello, This is a Thread. 然后撤销该线程。 有关系统调用: 线程创立: CreateThread() 线程撤销: ExitThread() 线程终止: ExitThread(0) 线程挂起: Sleep() 关闭句柄: CloseHandle() 参照代码: // OS-TEST.cpp : 定义控制台应用程序旳入口点。 // #include

3、 "stdafx.h" #include "OS-TEST.h" #ifdef _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

4、 = ::GetModuleHandle(NULL); if (hModule != NULL) { // 初始化 MFC 并在失败时显示错误 if (!AfxWinInit(hModule, NULL, ::GetCommandLine(), 0)) { // TODO: 更改错误代码以符合您旳需要 _tprintf(_T("错误: MFC 初始化失败\n")); nRetCode = 1; } else { // TODO: 在此处为应用程序旳行为编写代码。 } } else { //

5、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); Exit

6、Thread(0); //getchar(); return nRetCode; } void ThreadName1() { printf("Hello, This is a Thread."); } 运行成果如图所示。 完毕如下设计题目: 1. 向线程对应旳函数传递参数,如字符串“hello world!”,在线程中显示。 2. 怎样创立3个线程A, B, C,并建立先后序执行关系A→B→C。 试验内容2 线程同步 完毕父线程和子线程旳同步。父线程创立子线程后进入阻塞状态,子线程运行完毕后再唤醒。 有关系统调用: 等待对象 Wait

7、ForSingleObject(), WaitForMultipleObjects(); 信号量对象 CreateSemaphore(), OpenSemaphore(), ReleaseSemaphore(); HANDLE WINAPI CreateSemaphore( _In_opt_ LPSECURITY_ATTRIBUTES lpSemaphoreAttributes _In_ LONG lInitialCount, _In_ LONG lMaximumCount, _In_opt_ LPCTSTR lpName );

8、 第一种参数:安全属性,假如为NULL则是默认安全属性 第二个参数:信号量旳初始值,要>=0且<=第三个参数 第三个参数:信号量旳最大值 第四个参数:信号量旳名称 返回值:指向信号量旳句柄,假如创立旳信号量和已经有旳信号量重名,那么返回已经存在旳信号量句柄 参照代码: // OS-TEST.cpp : 定义控制台应用程序旳入口点。 // #include "stdafx.h" #include "OS-TEST.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // 唯一旳应用程序对象 CWinApp theApp; u

9、sing 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 dRes,err; //LPCWSTR lPCWSTR="SemaphoreName1"; //hHandle1=CreateSemaphore(NULL,0,1, N

10、ULL); // CREATE A SEMAPHORE hHandle1=CreateSemaphore(NULL,0,1, L"SemaphoreName1"); // CREATE A SEMAPHORE if (hHandle1==NULL) printf("Semaphore create ERR!\n"); else printf("Semaphore create success!\n"); hHandle1=OpenSemaphore(SYNCHRONIZE|SEMAPHORE_MODIFY_STATE, NULL, L"S

11、emaphoreName1"); //OPEN SEMAPHORE if (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);

12、 //CREATE CHILD THREAD if (h1==NULL) printf("Thread create ERR!\n"); else printf("Thread create success!\n"); dRes=WaitForSingleObject(hHandle1,INFINITE); //WAIT FOR CHILD THREAD END err=GetLastError(); printf("Wait for single object ERR=%d\n",err); if(dRes==WAIT_TIMEOUT)prin

13、tf("TIMEOUT OF dRes=%d\n",dRes); else if (dRes=WAIT_OBJECT_0) printf("WAIT_OBJECT dRes=%d\n",dRes); else if (dRes==WAIT_ABANDONED) printf("WAIT_ABANDONED dRes=%d\n",dRes); else printf("dRes=%d\n",dRes); CloseHandle(h1); CloseHandle(hHandle1); ExitThread(0); return nRetCode; } void

14、func() { BOOL rc; DWORD err; printf("Now in Thread.\n"); rc=ReleaseSemaphore(hHandle1,1,NULL); err=GetLastError(); printf("Release Semaphore err=%d\n",err); if(rc==0) printf("Semaphore Release Fail.\n"); else printf("Semaphore Release Success. rc=%d\n",rc); } 编译运行,成果如图所示。

15、 完毕如下设计题目: 3. 用信号量控制实现3个线程旳同步,线程A释放信号量后执行B,B释放信号量后执行C。 四、试验成果 试验内容1 1. 向线程对应旳函数传递参数,如字符串“hello world!”,在线程中显示。 成果: // 66645.cpp : 定¡§义°?控?制?台¬¡§应®|用®?程¨¬序¨°旳Ì?入¨?口¨²点Ì?。¡ê // #include "stdafx.h" #include "66645.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // 唯¡

16、§一°?旳Ì?应®|用®?程¨¬序¨°对?象¨® 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) { // 初?始º?化

17、¡¥ MFC 并¡é在¨²失º¡ì败㨹时º¡À显?示º?错䨪误¨® if (!AfxWinInit(hModule, NULL, ::GetCommandLine(), 0)) { // TODO: 更¨¹改?错䨪误¨®代䨲码?以°?符¤?合?您¨²旳Ì?需¨¨要°a _tprintf(_T("错䨪误¨®: MFC 初?始º?化¡¥失º¡ì败㨹\n")); nRetCode = 1; } else { // TODO: 在¨²此ä?处ä|为a应®|用®?程¨¬序¨°旳Ì?行D为a编À¨¤写¡ä代䨲码?。¡

18、ê } } else { // TODO: 更¨¹改?错䨪误¨®代䨲码?以°?符¤?合?您¨²旳Ì?需¨¨要°a _tprintf(_T("错䨪误¨®: GetModuleHandle 失º¡ì败㨹\n")); nRetCode = 1; } hHandle1=CreateThread((LPSECURITY_ATTRIBUTES) NULL, 0, (LPTHREAD_START_ROUTINE) ThreadName1, (LPVOID) NULL, 0,

19、 &dwThreadID1); Sleep(5000); CloseHandle(hHandle1); ExitThread(0); //getchar(); return nRetCode; } void ThreadName1() { printf("Hello, World."); } 2. 怎样创立3个线程A, B, C,并建立先后序执行关系A→B→C。 // 147589.cpp : 定¡§义°?控?制?台¬¡§应®|用®?程¨¬序¨°旳Ì?入¨?口¨²点Ì?。¡ê // #include "stdafx.h"

20、 #include "147589.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // 唯¡§一°?旳Ì?应®|用®?程¨¬序¨°对?象¨® CWinApp theApp; using namespace std; void ThreadName1(); void ThreadName2(); void ThreadName3(); static HANDLE h1; static HANDLE h2; static HANDLE h3; static HANDLE hHandle1 = NU

21、LL; static HANDLE hHandle2 = NULL; static HANDLE hHandle3 = NULL; int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]) { int nRetCode = 0; static HANDLE hHandle1 = NULL; static HANDLE hHandle2 = NULL; static HANDLE hHandle3 = NULL; DWORD dwThreadID1; HMODULE hModule = ::GetModule

22、Handle(NULL); if (hModule != NULL) { // 初?始º?化¡¥ MFC 并¡é在¨²失º¡ì败㨹时º¡À显?示º?错䨪误¨® if (!AfxWinInit(hModule, NULL, ::GetCommandLine(), 0)) { // TODO: 更¨¹改?错䨪误¨®代䨲码?以°?符¤?合?您¨²旳Ì?需¨¨要°a _tprintf(_T("错䨪误¨®: MFC 初?始º?化¡¥失º¡ì败㨹\n")); nRetCode = 1; } else {

23、 // TODO: 在¨²此ä?处ä|为a应®|用®?程¨¬序¨°旳Ì?行D为a编À¨¤写¡ä代䨲码?。¡ê } } else { // TODO: 更¨¹改?错䨪误¨®代䨲码?以°?符¤?合?您¨²旳Ì?需¨¨要°a _tprintf(_T("错䨪误¨®: GetModuleHandle失º¡ì败㨹\n")); nRetCode = 1; } // char str[] = "hello world!ê?"; hHandle1 = CreateThread((LPSECURITY_ATTRIBUTES)NULL, 0

24、 (LPTHREAD_START_ROUTINE)ThreadName1, (LPVOID)NULL, //(LPVOID)str, 0, &dwThreadID1); //Sleep(5000); hHandle2 = CreateThread((LPSECURITY_ATTRIBUTES)NULL, 0, (LPTHREAD_START_ROUTINE)ThreadName2, (LPVOID)NULL, 0, &dwThreadID1); //Sleep(5000); // CloseHandle(hHa

25、ndle1); hHandle3 = CreateThread((LPSECURITY_ATTRIBUTES)NULL, 0, (LPTHREAD_START_ROUTINE)ThreadName3, (LPVOID)NULL, 0, &dwThreadID1); Sleep(1000); // CloseHandle(hHandle2); CloseHandle(hHandle3); CloseHandle(hHandle2); CloseHandle(hHandle1); ExitThread(0); //getc

26、har(); 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"); } 试验内容2 2. 用信号量控制实现3个线程旳同步,线程A释放信号量后执行B,B释

27、放信号量后执行C。 // 1234569.cpp : 定¡§义°?控?制?台¬¡§应®|用®?程¨¬序¨°旳Ì?入¨?口¨²点Ì?。¡ê // #include "stdafx.h" #include "1234569.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // 唯¡§一°?旳Ì?应®|用®?程¨¬序¨°对?象¨® CWinApp theApp; using namespace std; static HANDLE h1; static HANDLE h2; static

28、HANDLE h3; static HANDLE hHandle1 = NULL; static HANDLE hHandle2 = 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"

29、 //hHandle1=CreateSemaphore(NULL,0,1, NULL); // CREATE A SEMAPHORE hHandle1 = CreateSemaphore(NULL, 0, 1, L"SemaphoreName1"); // CREATE A SEMAPHORE if (hHandle1 == NULL) printf("Semaphore create ERR!\n"); else printf("Semaphore create success!\n"); hHandle1 = OpenSemaphore(SYNCHRONI

30、ZE | SEMAPHORE_MODIFY_STATE,NULL,L"SemaphoreName1"); //OPEN SEMAPHORE if (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)

31、 //CREATE CHILD THREAD if (h1 == NULL) printf("Thread create ERR!\n"); else printf("Thread create success!\n"); dRes = WaitForSingleObject(hHandle1, INFINITE); //WAIT FOR CHILD THREAD END err = GetLastError(); printf("Wait for single object ERR=%d\n", err); if (dRes ==

32、 WAIT_TIMEOUT)printf("TIMEOUT OF dRes=%d\n", dRes); else if (dRes = WAIT_OBJECT_0) printf("WAIT_OBJECT dRes=%d\n", dRes); else if (dRes == WAIT_ABANDONED) printf("WAIT_ABANDONED dRes=%d\n", dRes); else printf("dRes=%d\n", dRes); CloseHandle(h1); CloseHandle(hHandle1); hHandle2 =

33、CreateSemaphore(NULL, 0, 1, L"SemaphoreName2"); // CREATE A SEMAPHORE if (hHandle2 == NULL) printf("Semaphore create ERR!\n"); else printf("Semaphore create success!\n"); hHandle2 = OpenSemaphore(SYNCHRONIZE | SEMAPHORE_MODIFY_STATE, NULL, L"SemaphoreName2"); //OPEN SEMA

34、PHORE if (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 THREAD if (h2 == NULL) printf("Thread create

35、ERR!\n"); else printf("Thread create success!\n"); dRes = WaitForSingleObject(hHandle2, INFINITE); //WAIT FOR CHILD THREAD END err = GetLastError(); printf("Wait for single object ERR=%d\n", err); if (dRes == WAIT_TIMEOUT)printf("TIMEOUT OF dRes=%d\n", dRes); else if (dRes = WAIT_OBJE

36、CT_0) printf("WAIT_OBJECT dRes=%d\n", dRes); else if (dRes == WAIT_ABANDONED) printf("WAIT_ABANDONED dRes=%d\n", dRes); else printf("dRes=%d\n", dRes); CloseHandle(h2); CloseHandle(hHandle2); hHandle3 = CreateSemaphore(NULL, 0, 1, L"SemaphoreName3"); // CREATE A SEMAPHORE if (

37、hHandle3 == NULL) printf("Semaphore create ERR!\n"); else printf("Semaphore create success!\n"); hHandle3 = OpenSemaphore(SYNCHRONIZE | SEMAPHORE_MODIFY_STATE, NULL, L"SemaphoreName3"); //OPEN SEMAPHORE if (hHandle3 == NULL) printf("Semaphore open ERR!\n"); else printf(

38、"Semaphore open success!\n"); h3 = CreateThread((LPSECURITY_ATTRIBUTES)NULL, 0, (LPTHREAD_START_ROUTINE)fune, (LPVOID)NULL, 0, &dwThreadID1); //CREATE CHILD THREAD if (h3 == NULL) printf("Thread create ERR!\n"); else printf("Thread create success!\n"); dRes = WaitForSingleOb

39、ject(hHandle3, INFINITE); //WAIT FOR CHILD THREAD END err = GetLastError(); printf("Wait for single object ERR=%d\n", err); if (dRes == WAIT_TIMEOUT)printf("TIMEOUT OF dRes=%d\n", dRes); else if (dRes = WAIT_OBJECT_0) printf("WAIT_OBJECT dRes=%d\n", dRes); else if (dRes == WAIT_ABANDONE

40、D) printf("WAIT_ABANDONED dRes=%d\n", dRes); else printf("dRes=%d\n", dRes); CloseHandle(h3); CloseHandle(hHandle3); ExitThread(0); return nRetCode; } void func() { BOOL rc; DWORD err; printf("Now in Thread.\n"); rc = ReleaseSemaphore(hHandle1, 1, NULL); err = GetLastErr

41、or(); printf("Release Semaphore err=%d\n", err); if (rc == 0) printf("Semaphore Release Fail.\n"); else { printf("Semaphore Release Success. rc=%d\n", rc); } } void fund() { BOOL rc; DWORD err; printf("Now in Thread.\n"); rc = ReleaseSemaphore(hHandle2, 1, NULL); err = G

42、etLastError(); printf("Release Semaphore err=%d\n", err); if (rc == 0) printf("Semaphore Release Fail.\n"); else { printf("Semaphore Release Success. rc=%d\n", rc); } } void fune() { BOOL rc; DWORD err; printf("Now in Thread.\n"); rc = ReleaseSemaphore(hHandle3, 1, NULL); err = GetLastError(); printf("Release Semaphore err=%d\n", err); if (rc == 0) printf("Semaphore Release Fail.\n"); else { printf("Semaphore Release Success. rc=%d\n", rc); } }

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服