WinAPI 多线程(一)

包含头文件

#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;
}

 

 

 

均为自己学习时所做记录 方便日后查阅

  • 11
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值