1、CreateThread创建线程
HANDLE WINAPICreateThread(
_In_opt_ LPSECURITY_ATTRIBUTESlpThreadAttributes,
_In_ SIZE_T dwStackSize,
_In_ LPTHREAD_START_ROUTINElpStartAddress,
_In_opt_ __drv_aliasesMem LPVOIDlpParameter,
_In_ DWORD dwCreationFlags,
_Out_opt_ LPDWORD lpThreadId
);
返回值
函数成功,返回线程句柄;函数失败返回false。若不想返回线程ID,设置值为NULL。
lpThreadAttributes
指向SECURITY_ATTRIBUTES型态的结构的指针。在Windows 98中忽略该参数。在Windows NT中,NULL使用默认安全性,不可以被子线程继承,否则需要定义一个结构体将它的bInheritHandle成员初始化为TRUE
dwStackSize
设置初始栈的大小,以字节为单位,如果为0,那么默认将使用与调用该函数的线程相同的栈空间大小。任何情况下,Windows根据需要动态延长堆栈的大小。
lpStartAddress
指向线程函数的指针,函数声明:DWORD WINAPI 函数名(LPVOID lpParam)。
lpParameter
向线程函数传递的参数,是一个指向结构的指针,不需传递参数时,为NULL。
dwCreationFlags
线程标志,可取值如下:
(1)CREATE_SUSPENDED(0x00000004):创建一个挂起的线程,
(2)0:表示创建后立即激活。
(3)STACK_SIZE_PARAM_IS_A_RESERVATION(0x00010000):dwStackSize参数指定初始的保留堆栈的大小,否则dwStackSize指定提交的大小。
lpThreadId
保存新线程的id。
2、_beginthread创建线程(#include<process.h>)
uintptr_t_beginthread(
void(*_StartAddress) (void *),
unsigned _StackSize,
void * _ArgList
);
返回值
假如成功,函数将会返回一个新线程的句柄,用户可以像这样声明一个句柄变量存储返回值:HANDLE hStdOut = _beginthread(CheckKey,0, NULL)。如果失败_beginthread将返回-1。
start_address
新线程的起始地址,指向新线程调用的函数的起始地址。
stack_size
新线程的堆栈大小,可以为0。
arglist
传递给线程的参数列表,无参数时为NULL。
3、SuspendThread冻结(挂起)进程
DWORD SuspendThread(
_In_ HANDLEhThread
);
hThread
线程句柄。
4、ResumeThread解冻(恢复)进程
DWORDResumeThread(
_In_HANDLE hThread
);
hThread
线程句柄。
5、OpenThread打开线程,根据线程ID得到线程句柄
HANDLEOpenThread(
_In_ DWORD dwDesiredAccess,
_In_ BOOL bInheritHandle,
_In_ DWORD dwThreadId
);
dwDesiredAccess
Theaccess to the thread object. This access right is checked against the securitydescriptor for the thread. This parameter can be one or more of thethread access rights.(进程访问权限)
Ifthe caller has enabled the SeDebugPrivilege privilege, the requested access isgranted regardless of the contents of the security descriptor.
bInheritHandle
Ifthis value is TRUE, processes created by this process will inherit the handle.Otherwise, the processes do not inherit this handle.(进程句柄是否可以被继承)
dwThreadId
Theidentifier of the thread to be opened.
返回值
Ifthe function succeeds, the return value is an open handle to the specified thread.
Ifthe function fails, the return value is NULL.
6、ExitThread结束线程(内部)
VOIDExitThread(
_In_ DWORD dwExitCode
);
dwExitCode
Theexit code for the thread.
7、_endthread结束进程(内部)
void_endthread(void);
8、TerminateThread终止线程(外部)
BOOLTerminateThread(
_In_ HANDLE hThread,
_In_ DWORD dwExitCode
);
hThread
Ahandle to the thread to be terminated.
Thehandle must have the THREAD_TERMINATE access right. For more information, seeThread Security and Access Rights.
dwExitCode
Theexit code for the thread. Use the GetExitCodeThread function to retrieve athread‘s exit value.
返回值
Ifthe function succeeds, the return value is nonzero.
Ifthe function fails, the return value is zero.
9、GetExitCodeThread获取线程运行状态
BOOLGetExitCodeThread(
_In_ HANDLE hThread,
_Out_ LPDWORD lpExitCode
);
hThread
Handleto the thread.
lpExitCode
Pointerto a 32-bit variable to receive the thread termination status.
返回值
Nonzeroindicates success. Zero indicates failure.
10、GetCurrentThread获取当前线程的一个伪句柄
HANDLEGetCurrentThread(
VOID
);
返回值
Long,当前线程的伪句柄。
注解
只要当前线程需要使用一个线程句柄,就可以使用这个伪句柄(但在其他任务线程中都无效)。该句柄可以复制,但不可继承。不必调用CloseHandle函数来关闭这个句柄。