1)线程的基础知识

HANDLE CreateThread(
   PSECURITY_ATTRIBUTES psa, //该线程内核对象的默认安全属性,通常传递为NULL
   DWORD cbStack,   //设定线程可以将多少地址空间用于它自己的堆栈
   PTHREAD_START_ROUTINE pfnStartAddr,  //线程执行的线程函数的地址
   PVOID pvParam, //与线程函数的pvParam参数相同

   DWORD fdwCreate,//设定用于控制创建线程的其他标志。如果该值是0,线程创建后立即进行调度。如果

                                      是CREATE_SUSPENDE,系统完整的创建线程并进行初始化,但是要暂停该线程的运行。

   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)包含线程的进程终止运行(应该避免使用这种方法)

猜你喜欢

转载自blog.csdn.net/u010901792/article/details/72965505