2024年6月13日发(作者:)
计算机学院 2秦向红 操作系统实验报告
实验二 创建线程
一、实验目的
1. 通过创建线程、观察正在运行的线程和终止线程的程序设计和调试操作,进一步熟悉
操作系统的线程概念,理解进程与线程之间的关系。
2. 通过阅读和分析实验程序,学习创建线程、观察线程和终止线程的程序设计方法。
二、实验内容
1. 创建线程
创建线程并因而成就一个多线程程序,是以CreateThread()作为一切行动的开始.
此函数的原型如下:
HANDLE CreateThread{
LPSECURITY_ATTRIBUTES lpThreadAttributes,
DWORD dwStackSize,
LPTHREAD_START_ROUTINE lpStartAddress,
LPVOID lpParameter,
DWORD dwCreationFlags,
LPDWORD lpThreadId};
参数名称 使用目的
描述施行于该新线程的security属性.NULL表示使用缺省值.
新线程拥有自己的堆栈.0表示使用缺省大小:1MB.
新线程将开始的起始地址.这是一个函数指针.
此值将被传送到新线程函数作为参数
允许产生一个暂时挂起的线程.默认情况是立即开始执行
新线程的ID会被传回到这里
lpThreadAttributes
dwStackSize
lpStartAddress
lpParameter
dwCreationFlags
lpThreadId
如果CreateThread()成功,返回一个新创建的线程的handle。
如果CreateThread()失败,返回一个NULL。可以调用GetLastError()获知原因。
第 1 页
计算机学院 2秦向红 操作系统实验报告
2. 终止线程
线程结束代码可以依靠调用GetExitCodeThread()完成。
BOOL GetExitCodeThread{
HANDLE hThread, /*由CreateThread()传回的线程handle*/
LPDWORD lpExitCode /*指向一个DWORD,用于接受结束代码*/ };
如果成功,GetExitCodeThread()传回TRUE,否则传回FALSE.如果线程已结束,那么
线程的结束代码会被放在lpExitCode参数中带回来.如果线程尚未结束,lpExitCode带
回来的值是STILL_ACTIVE。
如果需要用更强制性的手法结束一个线程,可以使用ExitThread()。
三、 实验步骤
(1)开启五个线程,设计一个基于Win32多线程应用程序。
(2)基于Win32多线程应用程序,启动两个线程,当用户按下任意键时,试图退出。
(3)验证Thread 使用自己的 Stack 存放 function 中的 local variable。
四.程序设计
(1)声明线程标准函数形式,创建等待对象的句柄hThrd,创建接收 新线程ID的
DWORD变量。进行for循环,执行线程内容ThreadFunc并返回每个核心对象hThrd。之后
等待线程全部完成,结束程序。
(2)声明线程标准函数形式,创建等待对象的句柄hThrd1、hThrd2,创建获取线程
退出代码的exitCode1、exitCode2,创建接收新线程ID的DWORD变量。执行线程内容
ThreadFunc并返回每个核心对象hThrd并输出相关提示信息。进行for循环,接收用户
按下的任意键信息,调用GetExitCodeThread等待一个线程的结束,使用
GetExitCodeThread传回线程函数ThreadFunc的返回值。函数中用一个死循环,保证两
个线程能够完整的运行完成,getch()函数接收用户输入,尝试打断线程,但后面代码
保护了线程的继续执行,直至两个线程都执行完成,输出各自的返回值并退出。
(3)验证性程序。
第 2 页


发布评论