创建线程的方法(windows)

引用:windows程序员面试指南

windows上常用的创建线程的方法:CreateThread(),_beginthread(),std::thread

1.CreateThread()

CreateThread 是 windows 提供的 api,用法如下:

HANDLE CreateThread([in, optional]  LPSECURITY_ATTRIBUTES   lpThreadAttributes,[in]            SIZE_T                  dwStackSize,[in]            LPTHREAD_START_ROUTINE  lpStartAddress,[in, optional]  __drv_aliasesMem LPVOID lpParameter,[in]            DWORD                   dwCreationFlags,[out, optional] LPDWORD                 lpThreadId
);

注意:默认情况下,每个线程都有 1MB 的堆栈空间

2._beginthread() 和 _beginthread()

uintptr_t _beginthread( // NATIVE CODEvoid( __cdecl *start_address )( void * ),unsigned stack_size,void *arglist
);
uintptr_t _beginthread( // MANAGED CODEvoid( __clrcall *start_address )( void * ),unsigned stack_size,void *arglist
);
uintptr_t _beginthreadex( // NATIVE CODEvoid *security,unsigned stack_size,unsigned ( __stdcall *start_address )( void * ),void *arglist,unsigned initflag,unsigned *thrdaddr
);
uintptr_t _beginthreadex( // MANAGED CODEvoid *security,unsigned stack_size,unsigned ( __clrcall *start_address )( void * ),void *arglist,unsigned initflag,unsigned *thrdaddr
);

注意:若要使用 _beginthread 或 _beginthreadex,应用程序必须与一个多线程 C 运行库链接。

CreateThread()和_beginthread()的区别

1.库的不同:CreateThread是Windows API的一部分,而_beginthread是C运行库(CRT)中的函数。这意味着_beginthread可以在C或C++程序中通过包含相应的头文件来使用,而CreateThread则需要通过包含processthreadsapi.h头文件来使用。
2.线程对象的处理:使用CreateThread创建的线程在终止后,线程对象仍然存在于系统中,需要显式地通过调用CloseHandle来关闭该线程对象。而使用_beginthread创建的线程,在调用_endthread后会自动销毁线程对象,无需手动关闭。
3.对CRT库的兼容性:如果在线程中使用CRT库,应该使用_beginthread而不是CreateThread。这是因为CreateThread不会判断传递给它的起始地址lpStartAddr是数据还是代码,也不会判断是否有足够的访问权限。这可能导致类成员函数或非函数指针的强制转换,以及栈溢出和访问权限问题。此外,如果在线程中使用类成员函数,需要注意this指针的正确传递。而在类对象外调用时,this指针可能是未知的。
4.内存泄漏:在使用CRT函数时,如果在CreateThread创建的线程中使用CRT函数,可能会导致内存泄漏。而在_beginthread创建的线程中使用CRT函数通常不会产生内存泄漏问题。

3.std::thread

C++11,添加 std::thread
常用方法:
get_id 获取线程 ID。
joinable 检查线程是否可被 join。
join Join 线程。
detach Detach 线程
swap Swap 线程 。
native_handle 返回 native handle。
hardware_concurrency [static] 检测硬件并发特性
————————————————

                        版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/qq_34213260/article/details/106445995

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/13357.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaGUI---JavaFX---未完结

一、Java事件处理机制的应用 JavaFX:JavaFX是Java平台上的一个GUI工具包,它提供了一些内置的事件处理机制。 Swing:Swing是Java平台上的另一个GUI工具包,它也提供了一些内置的事件处理机制。 二、JavaFX和Swing的关键区别&…

20232906 2023-2024-2 《网络与系统攻防技术》第十次作业

20232906 2023-2024-2 《网络与系统攻防技术》第十次作业 1.实验内容 一、SEED SQL注入攻击与防御实验 我们已经创建了一个Web应用程序,并将其托管在http://www.seedlabsqlinjection.com/(仅在SEED Ubuntu中可访问)。该Web应用程序是一个简…

算法day08

第一题 1. 两数之和 由上述题意所知,本题要采用二分法的解题思路,二分法主要是面向有序的数组且也满足二段性的数组,所谓二段性就是在一定的规则下能把该数组分成两个部分; 本题注意要点: 1、循环结束的条件&#xff…

行为决策树

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录前言行为决策树前言 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长! 本文先对** 行为决策树**做个简单的介绍,具体内容后…

从国内盲盒小程序看国外市场的发展机遇与挑战

近年来,随着国内电商市场的蓬勃发展,盲盒小程序作为一种新兴的电商模式,以其独特的购物体验和创新的营销策略,迅速赢得了广大消费者的喜爱。然而,随着国内市场逐渐趋于饱和,许多盲盒小程序开始寻求海外市场…

【Leetcode每日一题】 综合练习 - 括号生成(难度⭐⭐)(76)

1. 题目解析 题目链接:22. 括号生成 这个问题的理解其实相当简单,只需看一下示例,基本就能明白其含义了。 2.算法原理 问题描述 我们需要找出所有可能的、有效的括号序列。一个有效的括号序列指的是一个仅由(和)组成的字符串,…

ssm132医院住院综合服务管理系统设计与开发+vue

医院住院综合服务管理系统的设计与实现 摘 要 互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对医院住院信息管理混乱&…

【高阶数据结构(四)】图的最短路径问题

💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:高阶数据结构专栏⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学习更多数据结构   🔝🔝 高阶数据结构 1. 前言2. 单源最短…

第八篇 Asciidoc 输出 All In One HTML 解决图片无法显示问题

问题:我的图片显示不出来了 小明使用 Asciidoc 来记笔记,他将笔记输出为 HTML 文件。小丽向小明借笔记。小明将 Asciidoc 笔记输出为 HTML文件,并拷贝给了小丽。 但是,小丽发现,图片都显示不出来了。 小丽:小明,你给我的笔记,图片都显示不出来啊。 小明:是我给你的…

析构函数详解

目录 析构函数概念特性对象的销毁顺序 感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接 🐒🐒🐒 个人主页 🥸🥸🥸 C语言 🐿️🐿️🐿️ C语言例题 &…

yolov8实战之 .pt 转. tensorRT

1 yolo 训练 1.1修改自己的数据集合 我是有3个类别,差不多这么些数据 1.2 训练 from ultralytics import YOLO # Load a model model YOLO("yolov8m.yaml") # build a new model from scratch #model YOLO(E:/pythonCode/pythonProject1/runs/detec…

风电功率预测 | 基于PSO-BP神经网络实现风电功率预测(附matlab完整源码)

风电功率预测 风电功率预测完整代码风电功率预测 基于粒子群优化算法(Particle Swarm Optimization, PSO)的BP神经网络是一种常见的方法,用于实现风电功率预测。下面是一个基于PSO-BP神经网络实现风电功率预测的一般步骤: 数据准备:收集与风电场发电功率相关的数据,包括…

农林科学SCI期刊,IF=6+,影响力高,对国人非常友好!

一、期刊名称 Crop Journal 二、期刊简介概况 期刊类型:SCI 学科领域:农林科学 影响因子:6.6 中科院分区:1区 出版方式:开放出版 版面费:$900 三、期刊征稿范围 《作物杂志》是一份双月刊、国际、同…

PHP使用Browsershot进行网页截图

Browsershot是什么 Spatie Browsershot 是一个开源PHP库,它允许开发者在PHP应用程序中生成网页的截图。 这个库特别适用于Laravel框架,但也可以在其他 PHP 应用程序中使用。 主要特点 无头浏览器截图:使用无头版本的 Chrome 或 Chromium 浏…

整理好了!2024年最常见 100 道 Java基础面试题(四十九)

上一篇地址:整理好了!2024年最常见 100 道 Java基础面试题(四十八)-CSDN博客 九十七、Class.forName 和 ClassLoader 的区别? Class.forName 和 ClassLoader 是Java中用于加载类的两个不同的概念,它们在类…

10W 3KVAC隔离 宽电压输入 AC/DC 电源模块 ——TP10AF系列

TP10AF系列输出功率为10W,具有可靠性高、更小的体积、性价比高等特点,广泛用于工控和电力仪器、仪表、智能家居等相关行业。

SMB攻击利用之-mimikatz上传/下载流量数据包逆向分析

SMB协议作为windows环境下最为常见的一种协议,在历史上出现过无数的通过SMB协议进行网络攻击利用的案例,包括针对SMB协议本身以及通过SMB协议实施网络攻击。 本文将介绍一种通过SMB协议的常见利用方式,即向远程主机传输mimikatz,作为我的专栏《SMB攻击流量数据包分析》中的…

Oracle数据块之数据行中的SCN

从Oracle 10g开始,如果在表级别打开ROW DEPENDENCIES,业务数据行发生更改时会在数据块中进行登记。 可以通过DUMP数据块来观察上述SCN: (1)创建测试表,插入3条测试数据,插入一条提交一次。并调用…

解析建筑装饰乙级资质标准及申请流程

建筑装饰乙级资质标准 资历与信誉 必须具备独立的企业法人资格。社会信誉良好,注册资本不少于100万元人民币。 技术条件 专业技术人员配备齐全、合理,满足相应资质标准中对主要专业技术人员数量和专业的具体要求。通常包括但不限于室内设计、建筑、环境艺…