线程创建

来源:互联网 发布:wechat.class.php实例 编辑:程序博客网 时间:2024/06/04 01:05

CreateThread(SEC_ATTRS SecurityAttributes,
ULONG StackSize,
SEC_THREAD_START StartFunction,
PVOID ThreadParameter,
ULONG CreationFlags,
PULONG ThreadId)
SecurityAttributes:指向一个SEC_ATTRS结构的指针,决定返回的句柄是否可以被子进程继承
StackSize:设置初始栈的大小,以字节为单位,如果为0,那么默认将使用与调用该函数的线程相同的栈空间大小。任何情况下,Windows根据需要动态延长堆栈的大小。
StartFunction:指向线程函数的指针,但这个线程函数的格式有限定,必须是 DWORD WINAPI 函数名 (LPVOID lpParam) ,格式不正确将无法调用成功。
ThreadParameter:向线程函数传递的参数,是一个指向结构的指针,不需传递参数时,为NULL
CreationFlags:线程标志,有如下取值
CREATE_SUSPENDED(0x00000004):创建一个挂起的线程
0:表示创建后立即激活
ThreadId:指向一个ULONG数据类型的指针,用来接收线程ID返回值
return value:
返回值是一个线程句柄
注意:有一个函数为CloseHandle(handle),这个函数只是表示不关心或不再使用线程句柄这个变量了,而不是关闭线程

_beginthreadex
在这里不做说明,因为参数与CreateThread基本相同,值得一提的是由于该函数为线程保存了本地数据块,所以该函数比CreateThread安全
unsigned int WINAPI WorkThread4(void* param)这个是线程函数的格式

还有一个是C++11的特性
在头文件thread中
Thread t1(func);
有两种用法:
1.非成员线程函数
void WorkThread3(int p1,char p2)//参数个数随意定制
thread t1(WorkThread3,p1);
2.成员函数
class AS
{
public:
AS()
{

}void Catch(){    for (int i = 0; i < 1000; i++)    {        cout << "抓到第" << i << "只老鼠" << endl;    }}

};
AS hs;
thread t1(&AS::Catch, hs);

原创粉丝点击