HANDLE CreateThread(
PSECURITY_ATTRIBUTES psa, //该线程内核对象的默认安全属性,通常传递为NULL
DWORD cbStack, //设定线程可以将多少地址空间用于它自己的堆栈
PTHREAD_START_ROUTINE pfnStartAddr, //线程执行的线程函数的地址
PVOID pvParam, //与线程函数的pvParam参数相同
PDWORD pdwThreadID //系统分配给新线程的ID
);
一)当CreateThread被调用时,系统创建一个线程内核对象。该线程内核对象不是线程本身,而是操作系统用来管理线程的较小的数据结构。
系统从进程的地址空间分配内存,供线程的堆栈使用。新线程可以访问进程的内核对象的所有句柄、进程中的所有内存和在这个相同的进程中的所有其他线程的堆栈。
这使得单个进程中的多个线程确实能够非常容易地相互通信。
二)终止线程的运行
(1)线程函数返回(最好使用这种方法)
当想要线程终止运行时,他们能够返回。
如果线程能够返回,可以确保以下事项的实现:
*在线程中创建的所有c++对象均正确的撤销
*操作系统正确地释放线程堆栈使用的内存‘
*系统将线程的退出代码设置为线程函数的返回值
*系统将递减线程内核对象的使用计数
(2)ExitThread函数,线程将自行撤销(最好不要使用这种方法)
Void ExitThread(DWORD dwExitCode);
函数终止线程的运行,操作系统将清除该线程使用的所有系统资源。但是,c++资源(如c++类对象)将不被撤销。
(3)同一个进程或另一个进程中的线程调用TerminateThread函数(应该避免使用这种方法)
Bool TerminateThread(HANDLE hThread,DWORD dwExitCode);
与ExitThread不同,ExitThread总是撤销调用的线程,TerminateThread能够撤销任何线程。当线程终止运行时,他的退出代码成为你作为dwExitCode的参数传递的值。
同时,线程的内核对象的使用计数也被递减。
注意:TerminateThread函数是异步运行的函数,也就是说,他告诉系统想要线程终止运行,但是,当函数返回时,不能保证线程被撤销。
(4)包含线程的进程终止运行(应该避免使用这种方法)
PSECURITY_ATTRIBUTES psa, //该线程内核对象的默认安全属性,通常传递为NULL
DWORD cbStack, //设定线程可以将多少地址空间用于它自己的堆栈
PTHREAD_START_ROUTINE pfnStartAddr, //线程执行的线程函数的地址
PVOID pvParam, //与线程函数的pvParam参数相同
DWORD fdwCreate,//设定用于控制创建线程的其他标志。如果该值是0,线程创建后立即进行调度。如果
是CREATE_SUSPENDE,系统完整的创建线程并进行初始化,但是要暂停该线程的运行。
);
一)当CreateThread被调用时,系统创建一个线程内核对象。该线程内核对象不是线程本身,而是操作系统用来管理线程的较小的数据结构。
系统从进程的地址空间分配内存,供线程的堆栈使用。新线程可以访问进程的内核对象的所有句柄、进程中的所有内存和在这个相同的进程中的所有其他线程的堆栈。
这使得单个进程中的多个线程确实能够非常容易地相互通信。
二)终止线程的运行
(1)线程函数返回(最好使用这种方法)
当想要线程终止运行时,他们能够返回。
如果线程能够返回,可以确保以下事项的实现:
*在线程中创建的所有c++对象均正确的撤销
*操作系统正确地释放线程堆栈使用的内存‘
*系统将线程的退出代码设置为线程函数的返回值
*系统将递减线程内核对象的使用计数
(2)ExitThread函数,线程将自行撤销(最好不要使用这种方法)
Void ExitThread(DWORD dwExitCode);
函数终止线程的运行,操作系统将清除该线程使用的所有系统资源。但是,c++资源(如c++类对象)将不被撤销。
(3)同一个进程或另一个进程中的线程调用TerminateThread函数(应该避免使用这种方法)
Bool TerminateThread(HANDLE hThread,DWORD dwExitCode);
与ExitThread不同,ExitThread总是撤销调用的线程,TerminateThread能够撤销任何线程。当线程终止运行时,他的退出代码成为你作为dwExitCode的参数传递的值。
同时,线程的内核对象的使用计数也被递减。
注意:TerminateThread函数是异步运行的函数,也就是说,他告诉系统想要线程终止运行,但是,当函数返回时,不能保证线程被撤销。
(4)包含线程的进程终止运行(应该避免使用这种方法)