实验二线程的创建

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验二创建线程

一、实验目的

1. 通过创建线程、观察正在运行的线程和终止线程的程序设计和调试操作,进一步熟悉操作系统的线程概念,理解进程与线程之间的关系。

2. 通过阅读和分析实验程序,学习创建线程、观察线程和终止线程的程序设计方法。

二、实验内容

1. 创建线程

创建线程并因而成就一个多线程程序,是以CreateThread()作为一切行动的开始.此函数的原型如下:

HANDLE CreateThread{

LPSECURITY_ATTRIBUTES lpThreadAttributes,

DWORD dwStackSize,

LPTHREAD_START_ROUTINE lpStartAddress,

LPVOID lpParameter,

DWORD dwCreationFlags,

LPDWORD lpThreadId};

如果CreateThread()成功,返回一个新创建的线程的handle。

如果CreateThread()失败,返回一个NULL。可以调用GetLastError()获知原因。

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)验证性程序。

五.实验结果(1)

(2)

(3)

六、 实验总结

通过本次实验,让我更加清楚的对线程有了清除的认识,与上次的实验作对比,清楚明了的区别了线程和进程的概念。两外对于线程的创建过程也有了进一步的学习与认识。

相关文档
最新文档