您的位置:首页 > 编程语言

Windows核心编程 第6章线程基础

2015-04-26 21:23 375 查看
1.进程组成:

进程内核对象

地址空间

2.线程组成:

线程的内核对象(一个有线程统计信息构成的小型数据结构)

线程栈

3.进程下的线程共享:

同一个地址空间

执行同样的代码(内部if else 不考虑哦)

处理相同的数据

共享进程内核对象句柄

4.进程加载的流程

.


5.线程的声明实现:

DWORD WINAPI ThreadFunc(PVOID pvParam)
{
DWORD dwResult = 0;
//实现相关业务逻辑
return dwResult;
}


6.创建线程的函数:

CreateThread, 该函数是windows函数,

如果你写的程序用到了C/C++运行库应该使用_beginthreadex函数代替

(一般工作中的开发, 都用到了C/C++运行,所以记住_beginthreadex就好了),原因是不安全(/article/1358223.html)

这篇博客写了具体原因可以参考.

函数原型:

HANDLE WINAPI CreateThread(

LPSECURITY_ATTRIBUTESlpThreadAttributes,

SIZE_TdwStackSize,

LPTHREAD_START_ROUTINElpStartAddress,

LPVOIDlpParameter,

DWORDdwCreationFlags,

LPDWORDlpThreadId

);


函数说明:

第一个, 参数表示线程内核对象的安全属性,一般传入NULL表示使用默认设置。

第二个, 参数表示线程栈空间大小。传入0表示使用默认大小(1MB)。

第三个, 参数表示新线程所执行的线程函数地址,多个线程可以使用同一个函数地址。

第四个, 参数是传给线程函数的参数。

第五个, 参数指定额外的标志来控制线程的创建,为0表示线程创建之后立即就可以进行调度,如果为CREATE_SUSPENDED则表示线程创建后暂停运行,这样它就无法调度,直到调用ResumeThread()。

第六个, 参数将返回线程的ID号,传入NULL表示不需要返回该线程ID号。

函数返回值:成功返回新线程的句柄,失败返回NULL。

7.终止线程的运行

1、线程函数返回(推荐)。

2、通过调用ExitThread函数,线程将自行撤消(最好不使用该方法)。

3、同一个进程或另一个进程中的线程调用TerminateThread函数(应避免使用该方法)。

4、ExitProcess和TerminateProcess函数,即包含线程的进程终止运行(应避免使用该方法)。

8.线程函数返回.

正确的线程返回时,可以确保下列事项的实现:

(1)在线程函数中创建的所有C++对象均将通过它们的撤消函数正确地撤消。

(2)操作系统将正确地释放线程栈使用的内存。

(3)系统将线程的退出代码(在线程的内核对象中维护)设置为线程函数的返回值。

(4)系统将递减线程内核对象的使用计数。

8.终止线程函数:

ExitThread和TerminateThread(_beginthreadex和_endthreadex是对应的)

ExitThread结束主调线程(就是调用ExitThread的那个线程).

它释放线程栈的内存,但不释放线程中创建的C/C++内存.

TerminateThread杀死的线程连线程使用的栈都不释放.

第7,8条面试容易被问到
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: