包含头文件
#include<windows.h>
CreateThread创建线程
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes,
DWORD dwStackSize,
LPTHREAD_START_ROUTINE lpStartAddress,
LPVOID lpParameter,
DWORD dwCreationFlags,
LPDWORD lpThreadid);
参数
lpThreadAttributes: 指向SECURITY_ATTRIBUTES型态的结构的指针。在Windows NT中,设为NULL使用默认安全性。
dwStackSize: 设置初始栈的大小,以字节为单位,如果为0,那么默认将使用与调用该函数的线程相同的栈空间大小。
lpStartAddress: 指向线程函数的指针,函数名称没有限制,但是必须以下形式声明:DWORD WINAPI ThreadProc(LPVOID lpParam).
lpParameter: 向线程函数传递的参数,是一个void*的指针,不需传递参数时,为NULL。
dwCreationFlags: 线程的标志,可取值如下
(1)CREATE_SUSPENDED:创建一个挂起的线程,他无法运行直到调用Thread().
(2)0:表示创建后立即激活。
(3)STACK_SIZE_PARAM_IS_A_RESERVATION:未指定此标记,使用dwStackSize指定提交的大小。
lpThreadid: 保存新线程ID,若不想返回线程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:毫秒数。
例子:
#include<windows.h>
#include<iostream>
using namespace std;
DWORD WINAPI Threadpro(LPVOID lp)
{
char * name = (char*)lp;
while (true)
{
cout << "线程传参:" << name << endl;
DWORD id = GetCurrentThreadId();
cout << "子线程id:" << id << endl;
Sleep(1000);
}
return 0;
}
int main()
{
HANDLE thread;
DWORD threadid;
thread = CreateThread(NULL, 0, Threadpro, "hello",0, &threadid);
if (thread == NULL)
{
cout << "线程句柄错误:" << GetLastError() << endl;
}
cout << "句柄:" << thread << endl;
cout << "线程ID threadid :" << threadid << endl;
cout << "main线程id:" << GetCurrentThreadId() << endl;
//CloseHandle(thread);
getchar();
SuspendThread(thread);
getchar();
ResumeThread(thread);
getchar();
//system("pause");
return 0;
}
均为自己学习时所做记录 方便日后查阅