windows API(7)创建线程
程序员文章站
2022-03-05 09:54:23
...
什么是线程:
- 线程是附属在进程上的执行实体,是代码的执行流程
- 一个进程可以包含多个线程,但一个进程至少要包含一个线程,在C++程序中,main()函数即为主线程。
创建线程
HANDLE CreateThread
{
//安全描述符
LPSEECURITY_ATTRIBUTES lpThreadAttributes,
//初始堆栈的大小
SIZE_T dwStackSize,
//调用的线程函数
LPTHREAD_START_ROUTINE lpStartAddresss,
//调用的线程函数的参数
LPVOID lpParamenter,
//调用线程时的可选项
DWORD dwCreationFlags dwCreationFlags,
//线程的ID
LPDWORD lpThreadID
}
- 第一个参数在创建进程时已经讲过了,此处用法完全相同
- 线程初始堆栈的大小,填NULL即为默认大小,一般填NULL就可以了
- 线程要执行的代码
这个代码有固定的格式要求
DWORD WINAPI ThreadProc(LPVOID lpParameter)
必须要有一个返回值,一个LPVOID类型的参数。但是我们在创建线程时,只要通过强制类型转化,就可以将任意类型的函数传入
CreateThread函数在传递函数时只要强制转化即可(LPTHREAD_START_ROUTINE)FUNC即可
- 代码的参数
- 创建线程时的常用选项
- NULL,表示线程正常创建,线程创建立即进入执行状态
- CREATE_SUSPENDED,表示线程以挂起的状态创建,只有使用ResumeThread函数才可以**这个线程
- 线程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;
}