windows多线程之CreateThread

本文详细解析了Windows多线程编程的基础,着重介绍了CreateThread函数的使用,包括各参数的含义及具体示例。通过实例演示,帮助读者理解新线程与主线程的关系及潜在错误情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

进来要进行多线程的编写,复习一下windows多线程。首先从最基础的CreateThread开始学起。

首先看一下函数原型:

 HANDLE CreateThread(     PSECURITY_ATTRIBUTES psa,    

  DWORD cbStackSize,    

 PTHREAD_START_ROUTINE pfnStartAddr,  

    PVOID pvParam,     

DWORD dwCreateFlags,     

PDWORD pdwThrea)

参数含义如下:

psa:安全属性,是指向SECURITY_ATTRIBUTES的指针。NULL取默认。

cbStackSize:该线程申请的栈空间。

pfnStartAddr:指向新线程将要执行的线程函数的地址。

 dwCreateFlags:控制新线程的额外信息,以后会有说明。

 pdwThreadID:存储系统分配给新线程的ID。

下面看一个具体的例子。

#include <Windows.h>
#include <iostream>
using namespace std;
DWORD WINAPI FirstThread(PVOID pvParam){
*(int*)pvParam=5;
return(0);
}
int main(){
int x;
DWORD dwThreadId;
HANDLE hThread=CreateThread(NULL,0,FirstThread,&x,0,&dwThreadId);
CloseHandle(hThread);
cout<<x<<endl;
cout<<x<<endl;
system("pause");
return 0;
}

这段程序可以先想想一下输出可能是什么。在我的电脑上执行的结果如下:


从中可以看出新线程的执行时间和主线程的关系。这里要注意的是这个程序时可能出错的。当由于某种原因主线程退出的时候会将x的栈空间删除,如果这时候才进入新线程的话那么x是已经不存在的。编写时请注意这种情况

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值