好文档 - 专业文书写作范文服务资料分享网站

windows进程管理实验报告

天下 分享 时间: 加入收藏 我要投稿 点赞

.. . .. .

成绩:

实 验 报 告

课程名称: 操作系统 实验项目: windows进程管理

姓 名:

专 业: 计算机科学与技术

班 级: 学 号:

计算机科学与技术学院

计算机系

2019 年 4 月 23 日

.. v .. .

.. . .. .

实验项目名称: windows进程管理

一、实验目的

1. 学习windows系统提供的线程创建、线程撤销、线程同步等系统调用; 2. 利用C++实现线程创建、线程撤销、线程同步程序; 3. 完成思考、设计与练习。

二、实验用设备仪器及材料

1. Windows 7或10, VS2010及以上版本。

三、实验内容

1 线程创建与撤销

写一个windows控制台程序(需要MFC),创建子线程,显示Hello, This is a Thread. 然后撤销该线程。 相关系统调用:

线程创建: CreateThread() 线程撤销: ExitThread() 线程终止: ExitThread(0) 线程挂起: Sleep() 关闭句柄: CloseHandle() 参考代码:

// OS-TEST.cpp : 定义控制台应用程序的入口点。 //

#include \#include \#ifdef _DEBUG

#define new DEBUG_NEW #endif

// 唯一的应用程序对象 CWinApp theApp; using namespace std; void ThreadName1();

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])

.. v .. .

.. . .. .

{ 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: 在此处为应用程序的行为编写代码。 }

} 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);

.. v .. .

.. . .. .

}

//getchar(); return nRetCode;

void ThreadName1() { }

运行结果如图所示。

完成以下设计题目:

1. 向线程对应的函数传递参数,如字符串“hello world!”,在线程中显示。 2. 如何创建3个线程A, B, C,并建立先后序执行关系A→B→C。

printf(\

实验内容2 线程同步

完成父线程和子线程的同步。父线程创建子线程后进入阻塞状态,子线程运行完毕后再唤醒。 相关系统调用:

等待对象 WaitForSingleObject(), WaitForMultipleObjects();

信号量对象 CreateSemaphore(), OpenSemaphore(), ReleaseSemaphore(); HANDLE WINAPI CreateSemaphore(

_In_opt_ LPSECURITY_ATTRIBUTES lpSemaphoreAttributes _In_ LONG lInitialCount, _In_ LONG lMaximumCount, _In_opt_ LPCTSTR lpName );

第一个参数:安全属性,如果为NULL则是默认安全属性 第二个参数:信号量的初始值,要>=0且<=第三个参数 第三个参数:信号量的最大值 第四个参数:信号量的名称

返回值:指向信号量的句柄,如果创建的信号量和已有的信号量重名,那么返回已经存在的信号量句柄 参考代码:

// OS-TEST.cpp : 定义控制台应用程序的入口点。 //

.. v .. .

.. . .. .

#include \#include \#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[]) {

h1=CreateThread((LPSECURITY_ATTRIBUTES)NULL,

0,

(LPTHREAD_START_ROUTINE)func, (LPVOID)NULL, 0,

&dwThreadID1); //CREATE CHILD THREAD

hHandle1=OpenSemaphore(SYNCHRONIZE|SEMAPHORE_MODIFY_STATE,

NULL,

L\ //OPEN SEMAPHORE

//hHandle1=CreateSemaphore(NULL,0,1, NULL); // CREATE A SEMAPHORE

hHandle1=CreateSemaphore(NULL,0,1, L\ // CREATE A SEMAPHORE if (hHandle1==NULL) printf(\else printf(\int nRetCode = 0; DWORD dwThreadID1; DWORD dRes,err;

//LPCWSTR lPCWSTR=\

if (hHandle1==NULL) printf(\else printf(\

.. v .. .

windows进程管理实验报告

......成绩:实验报告课程名称:操作系统实验项目:windo
推荐度:
点击下载文档文档为doc格式
0rl240sqob9nplx1m54t1j03v4ivcy00ap3
领取福利

微信扫码领取福利

微信扫码分享