Windows平台的线程——创建和退出

Windows平台的线程  ---- 线程的创建和退出

创建线程的Win32API函数是CreateThread和CreateRemoteThread。前者创建的线程运行于当前的进程空间,而后者用于创建运行于其他进程空间中的线程。

线程创建后都回返回一个线程句柄,同时也可以在输出参数钟返回一个线程的编号。

通过线程句柄,我们可以对先做进行暂停、恢复等操作。和其他系统句柄一样,线程句柄也可以被当前进程的子进程所继承,使得当前进程的子进程也可以操作该线程。当然,如需要使线程句柄能被子进程所继承,还是有很多额外的手续要办的。

线程编号在系统中是唯一的,这个编号的有效期和线程的执行期对应,线程退出后,这个编号也就失效了。我们可以使用GetCurrentThreadId函数取得当前线程的编号,但系统没有提供根据线程编号获取线程句柄的方法,这是为了防止其他进程使用这种方法获取某一进程中的线程句柄后,胡乱对其进行操作而导致执行错误。

退出一个线程有很多方法,如,该线程在运行中调用了ExitThread函数,或者ExitProcess函数被调用使得整个进程退出,或者线程如阔函数返回退出,或者其他线程调用了TerminateThread或者TerminateProcess函数。线程退出后会有一个返回值,其他线程可以使用GetExitCodeThread函数获取退出线程的返回值。微软官方建议,尽量少用TerminateThread和TerminateProcess函数,这两个函数对程序的运行会带来无法预料的结果,比如线程因为受到这两个函数的强制退出,其所分配的资源无法正常释放等等。一般而言,通知线程退出的方法可以使用系统事件。

一个线程虽然退出执行,但此时它并没有从系统中完全释放。要完全释放线程,我们在线程退出运行后,还需要执行下一步,就是使用CloseHandle函数关闭这个线程的句柄。

 

你可能感兴趣的:(Windows,SDK,Series)