欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

windows API(7)创建线程

程序员文章站 2022-03-05 09:54:23
...

什么是线程:

  1. 线程是附属在进程上的执行实体,是代码的执行流程
  2. 一个进程可以包含多个线程,但一个进程至少要包含一个线程,在C++程序中,main()函数即为主线程。

创建线程

HANDLE CreateThread
{
	//安全描述符
	LPSEECURITY_ATTRIBUTES           lpThreadAttributes,
	//初始堆栈的大小
	SIZE_T                           dwStackSize,
	//调用的线程函数
	LPTHREAD_START_ROUTINE           lpStartAddresss,
	//调用的线程函数的参数
	LPVOID                           lpParamenter,
	//调用线程时的可选项
	DWORD dwCreationFlags            dwCreationFlags,
	//线程的ID
	LPDWORD                          lpThreadID
}
  1. 第一个参数在创建进程时已经讲过了,此处用法完全相同
  2. 线程初始堆栈的大小,填NULL即为默认大小,一般填NULL就可以了
  3. 线程要执行的代码
    这个代码有固定的格式要求
DWORD WINAPI ThreadProc(LPVOID lpParameter)

必须要有一个返回值,一个LPVOID类型的参数。但是我们在创建线程时,只要通过强制类型转化,就可以将任意类型的函数传入
CreateThread函数在传递函数时只要强制转化即可(LPTHREAD_START_ROUTINE)FUNC即可

  1. 代码的参数
  2. 创建线程时的常用选项
    1. NULL,表示线程正常创建,线程创建立即进入执行状态
    2. CREATE_SUSPENDED,表示线程以挂起的状态创建,只有使用ResumeThread函数才可以**这个线程
  3. 线程ID

一个实例

在控制台输出任意行数的++++++++

DWORD WINAPI ThreadProc(LPVOID lpParament)
{
	int *p = (int*)lpParament;
	for(int i=0; i<*p; ++i)
	{
		Sleep(500);
		printf("+++++++++\n", i);
	}
	return 0;
}

int main(int argc,char* argv[])
{
	HANDLE hThread;
	int n = 10;
	hThread = CreateThread(NULL,NULL,ThreadProc,(LPVOID)&n,NULL,NULL);
	Closehandle(hThread);
	
	system("pause");
	return 0;
}
相关标签: windows API