HANDLE CreateThread()

需要传递给新线程的任何参数都在CreateThread()的lpParamete中指定。线程函数在它的参数中接收这个32位的值。这个参数可以用作任何目的。函数返回它的退出状态。

函数原型如下:

#include <windows.h>

HANDLE CreateThread(

      LPSECURITY_ATTRIBUTES       lpThreadAttributes,  //线程的一些属性

      DWORD       dwStackSize,  //声明线程的堆栈大小

      LPTHREAD_START_ROUTINE     lpStartAddress,   //传入线程执行的函数(函数地址)

      LPVOID        lpParameter,   //给线程传入参数

      DWORD        dwCreationFlags,   //创建线程的参数
 
      LPDWORD     lpThreadid    //表示新建线程的ID号

);

各个参数的作用如下:

lpThreadAttributes:    

指向SECURITY_ATTRIBUTES型态的结构的指针。设为NULL使用默认安全性。

dwStackSize:           

设置初始栈的大小,以字节为单位,如果为0,那么默认将使用与调用该函数的线程相同的栈空间大小。

lpStartAddress:       

指向线程函数的指针,函数名称没有限制,

但是必须以下形式声明:DWORD WINAPI ThreadProc(LPVOID lpParam)。例如我将这个函数名定为DWORD WINAPI ClientThread(LPVOID lpParameter),

lpParameter:              

向线程函数传递的参数,是一个void*的指针,不需传递参数时,为NULL。

dwCreationFlags:     

线程的标志,可取值如下

(1)CREATE_SUSPENDED:系统创建线程后,该线程处于挂起状态,并不马上执行,直至函数ResumeThread()被调用。

(2)0:线程在被创建后立即开始执行。

(3)STACK_SIZE_PARAM_IS_A_RESERVATION:未指定此标记,使用dwStackSize指定提交的大小。

lpThreadid:             

返回所创建线程的ID。如果创建成功则返回线程的句柄,否则返回NULL。   若不想返回线程ID,这个参数设置为为NULL。

 

返回值:

成功:返回线程句柄

失败:返回NULL,调用GetLastError()获取失败原因。

备注:

(1)CreateThread 是Windows API中再主线程的基础上创建一个新线程。创建成功之后会返回一个hThread的handle,且内核对象的计数加1。

(2)CloseHandle之后,引用计数减1,当变为0时,系统删除内核对象。handle仅仅是线程的一个“标识”。

获取线程ID 

DWORD WINAPI GetCurrentThreadid(void);                    返回获取当前的ID。

关闭线程句柄(引用记数-1)

BOOL CloseHandle(HANDLE hObject);

关闭了一个线程句柄,引用计数-1,表示 我不对这个句柄对应的线程做任何干预(如waitforsingleobject之类),但并没有结束线程。

返回值:

成功:TRUE

失败:FALSE 调用GetLastError()获得失败原因。 

注意:如果关闭后再对句柄做任何都无用!

挂起指定的线程

DWORD WINAPI SuspendThread(HANDLE hThread);       hThread: 需要挂起的句柄。

恢复被挂起的线程

DWORD WINAPI ResumeThread(HANDLE hThread);        hThread: 需要挂起的句柄。

休眠线程的执行

VOID WINAPI Sleep(DWORD dwMilliseconds);                 dwMilliseconds:毫秒数。

 转自:

https://blog.csdn.net/weixin_41794771/article/details/81535183

原文地址:https://www.cnblogs.com/cyx-b/p/12555142.html