c++使用_beginthreadex创建线程

 记录使用_beginthreadex(),来创建线程。方便后期的使用。

创建一个线程

相关函数介绍

unsigned long _beginthreadex(

  

    void *security,    // 安全属性, 为NULL时表示默认安全性

    unsigned stack_size,    // 线程的堆栈大小, 一般默认为0

    unsigned(_stdcall *start_address)(void *),    // 所要启动的线程函数

    void *argilist, // 线程函数的参数, 是一个void*类型, 传递多个参数时用结构体

    unsigned initflag,    // 新线程的初始状态,0表示立即执行,CREATE_SUSPENDED

表示创建之后挂起

    unsigned *threaddr    // 用来接收线程ID

);

返回值 : // 成功返回新线程句柄, 失败返回0

代码设计

根据以上的相关介绍来创建一个线程

bool Thread::start()
{unsigned int thd;tid = (HANDLE)_beginthreadex((void *)0, 0, (_beginthreadex_proc_type)Thread::execute, (void*)this, (unsigned)0, (unsigned*)&thd);return tid != NULL;
}

Thread::execute() 是要运行的线程函数

void Thread::run()
{int i = 1000;while (i>0){std::cout << "run::%d..."<<i<<std::endl;i--;}
}void Thread::execute(void*thread)
{((Thread*)thread)->run();CloseHandle((HANDLE)((Thread*)thread)->tid);
}

Thread::run(),此函数为要运行的逻辑代码 

等待一个线程

相关函数介绍

DWORD WaitForSignleObject( HANDLE hHandle, DWORD dwMilliseconds );
参数说明:
    hHandle表示要等待检查的对象句柄;
    dwMillseconds表示该函数等待的期限;


函数功能说明:

        该函数是用来等待指定的对象被触发或函数超时。若dwMilliseconds设置为无限大INFINITE则该函数一直等待下去直到对象被触发。


函数返回值:

WAIT_OBJECT_0表示函数成功执行且指定的对象被触发处于signaled有信号状态;
 WAIT_TIMEOUT表示函数成功执行但超时且对象没有被触发处于nonsignaled无信号状态;
  WAIT_FAILED表示函数执行失败,通常是由hHandle句柄不可用,可以调用GetLastError()查看。

代码设计

bool Thread::join()
{HANDLE ttid = (HANDLE)tid;if (ttid && WaitForSingleObject(ttid, INFINITE) == WAIT_OBJECT_0){tid = 0;return true;}return false;
}

 代码的整体设计

线程类的声明

//Thread.h#pragma once
class Thread
{
public:Thread();virtual ~Thread();bool start();bool join();virtual void run();static void execute(void*);
private:volatile void* tid;
};

线程类的实现

//Thread.cpp#include"Thread.h"
#include <process.h>
#include<windows.h>
#include <iostream> Thread::Thread()
{}Thread::~Thread()
{}bool Thread::start()
{unsigned int thd;tid = (HANDLE)_beginthreadex((void *)0, 0, (_beginthreadex_proc_type)Thread::execute, (void*)this, (unsigned)0, (unsigned*)&thd);return tid != NULL;
}bool Thread::join()
{HANDLE ttid = (HANDLE)tid;if (ttid && WaitForSingleObject(ttid, INFINITE) == WAIT_OBJECT_0){tid = 0;return true;}return false;
}void Thread::run()
{int i = 1000;while (i>0){std::cout << "run::..."<<i<<std::endl;i--;}
}void Thread::execute(void*thread)
{((Thread*)thread)->run();CloseHandle((HANDLE)((Thread*)thread)->tid);
}

测试

#include"Thread.h"int main()
{Thread* PThread = new Thread();PThread->start();PThread->join();return 0;
}

测试结果

 此类,也可以做基类,通过继承重载run()操作,实现不同的操作

参考资料

C++ 使用_beginthreadex创建线程、线程句柄(等待线程关闭)、线程id的作用(发送线程消息)_c process.h 线程 等待线程结束-CSDN博客

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

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

相关文章

3D打印随形透气钢:技术革新引领模具制造新潮流

在模具制造领域&#xff0c;透气钢一直扮演着重要角色&#xff0c;它能够有效解决模具困气问题&#xff0c;提高注塑成型的效率和质量。然而&#xff0c;传统的透气钢制造方法受限于工艺和材料&#xff0c;难以满足复杂模具的需求。随着3D打印技术的飞速发展&#xff0c;3D打印…

Go微服务: 分布式之通过本地消息实现最终一致性

概述 我们的业务场景是可以允许我们一段时间有不一致的消息的状态的&#xff0c;并没有说必须特别高的这个消息的一致性比如说在TCC这个架构中&#xff0c;如果采用了消息的最终一致性&#xff0c;整体架构设计要轻松好多即便我们库存服务挂了&#xff0c;或者我们积分服务挂了…

【2024PythonPycharm详细安装教程】

1.打开官网 https://www.python.org/ downloads——>Windows 2.找到 Download Windows installer (64-bit) 下载 3.下载完成双击安装包 勾选Add python.exe to PATH(自动配置系统变量) 点击Install Now&#xff08;默认安装&#xff09; 然后看到安装成功&#xff0…

Oracle EBS AP发票创建会计科目错误:子分类帐日记帐分录未按输入币种进行平衡

系统版本 RDBMS : 12.1.0.2.0 Oracle Applications : 12.2.6 问题症状: 提交“创建会计科目”请求提示错误信息如下: 中文报错: 该子分类帐日记帐分录未按输入币种进行平衡。请检查日记帐分录行中输入的金额。 英文报错:The subledger journal entry does not balance i…

PS的stable diffusion插件安装指南

PS的stable diffusion插件安装指南 1.首先要安装stable diffusion&#xff0c;具体安装方法&#xff0c;参考https://blog.csdn.net/sheji888/article/details/139196688 stable diffusion要求要启用API功能 2.安装ps2023以上版本&#xff0c;低于这个版本不能使用stable diff…

17- Redis 中的 quicklist 数据结构

在 Redis 3.0 之前&#xff0c;List 对象的底层数据结构是双向链表或者压缩列表&#xff0c;然后在 Redis 3.2 的时候&#xff0c;List 对象的底层改由 quicklist 数据结构实现。 其实 quicklist 就是【双向链表 压缩列表】组合&#xff0c;因为一个 quicklist 就是一个链表&…

什么是ESG?

什么是ESG&#xff1f; ESG的实施和发展是企业应对全球和国内环境、社会和治理挑战的关键路径。《ESG入门一本通》详细阐述了ESG的概念、发展历程和评价体系&#xff0c;并结合中国的实际情况&#xff0c;强调了ESG的重要性和必要性。企业需重视ESG管理和信息披露&#xff0c;…

详细分析Mysql中的JSON_OBJECT() 基本知识(附Demo)

目录 前言1. 基本知识2. Demo 前言 对于基本的命令行以及优化推荐阅读&#xff1a; 数据库中增删改常用语法语句&#xff08;全&#xff09;Mysql优化高级篇&#xff08;全&#xff09;命令行登录Mysql的详细讲解 1. 基本知识 JSON_OBJECT() 是 MySQL 中用于生成 JSON 对象…

信息系统项目管理师0149:输入(9项目范围管理—9.4收集需求—9.4.1输入)

点击查看专栏目录 文章目录 9.4 收集需求9.4.1 输入9.4 收集需求 收集需求是为实现目标而确定,记录并管理干系人的需要和需求的过程。本过程的主要作用是为定义产品范围和项目范围奠定基础。本过程仅开展一次或仅在项目的预定义点开展。收集需求过程的数据流向如图 9-2 所示。…

电脑开机出现英文字母,如何解决这个常见问题?

电脑开机时出现英文字母的情况通常意味着系统在启动过程中遇到了问题。这些英文字母可能是错误信息、系统提示或BIOS设置问题。通过理解这些信息并采取适当的措施&#xff0c;您可以解决大多数启动问题。本文将介绍三种解决电脑开机出现英文字母问题的方法&#xff0c;帮助您恢…

BGP汇总+认证

一、BGP 的宣告问题 1、在 BGP 协议中每台运行 BGP 的设备上&#xff0c;宣告本地直连路由 2、在 BGP 协议中运行 BGP 协议的设备来宣告.通过 IGP 学习到的&#xff0c;未运行 BGP 协议设备产2、生的路由&#xff1b; 在 BGP 协议中宣告本地路由表中路由条目时,将携带本地到达这…

51单片机STC89C52RC——创建Keil项目

一&#xff0c;打开Keil5 菜单---project--New uVision Project... 二&#xff0c;新建项目文件夹 弹出选择文件夹对话框后&#xff0c;可以右键新建一个项目文件夹【文件夹名字可以随便取&#xff0c;自己看得懂就行&#xff0c;建议不要有特殊字符】&#xff0c;这样该项目…

MATLAB算法实战应用案例精讲-【数模应用】因子分析(附MATLAB和python代码实现)

目录 前言 算法原理 SPSS因子分析 操作步骤 结果分析 SPSSAU 因子分析案例 1、背景 2、理论 3、操作 4、SPSSAU输出结果 5、文字分析 6、剖析 疑难解惑 同源方差或共同方法变异偏差,Harman单因子检验? 提示出现奇异矩阵? 因子得分和综合得分? 因子分析计…

品牌策划:不只是工作,是一场创意与学习的旅程

你是否认为只有那些经验丰富、手握无数成功案例的高手才能在品牌策划界崭露头角&#xff1f; 今天&#xff0c;我要悄悄告诉你一个行业内的秘密&#xff1a;在品牌策划的世界里&#xff0c;经验虽重要&#xff0c;但绝非唯一。 1️、无止境的学习欲望 品牌策划&#xff0c;这…

rtl8723DU移植 android4.4 4418 (第二部分蓝牙部分)

使用的代码&#xff1a; HMI &#xff08;8723bu&#xff09;源码 567_RTL8723DU_WiFi_linux_v5.6.5.3_35502_COEX20181130-2e2e.20191025.zip 由于之前写的所有笔记没有保存&#xff0c;这里只能是部分。 0、 前置知识 1 、kernel 的移植 2、hardwire的移植 将 驱动中的 h…

系统思考—啤酒游戏沙盘

10个智商120的‮组人‬成‮团的‬队&#xff0c;大‮的家‬集体智‮是商‬多少&#xff1f; 在‮期长‬辅‮各导‬种‮业企‬的‮程过‬中&#xff0c;我‮经们‬常‮察观‬到&#xff0c;虽‮每然‬个‮门部‬都‮力努‬解决‮己自‬的问题&#xff0c;但‮司公‬整体的‮收应…

Rust 标记一个属性或函数为废弃

如题&#xff0c;演示Rust 标记一个属性或函数为废弃的基本使用方法&#xff1a; 示例&#xff1a; use serde::{Deserialize, Serialize};#[derive(Clone, Debug, Serialize, Deserialize, Default)] pub struct GrpcOptions {pub addr: String,pub max_recv_message_size: u…

conntrack如何限制您的k8s网关

1.1 conntrack 介绍 对于那些不熟悉的人来说,conntrack简单来说是Linux内核的一个子系统,它跟踪所有进入、出去或通过系统的网络连接,允许它监控和管理每个连接的状态,这对于诸如NAT(网络地址转换)、防火墙和保持会话连续性等任务至关重要。它作为Netfilter的一部分运行,…

解决福昕风腾PDF套装无法打印在线电子签章的方法

使用福昕风腾PDF套装打印在线电子签章文件时发现&#xff0c;在线盖的电子印章和签名却打印不出来&#xff0c;后现发现&#xff0c;按图中选项选择“文档”&#xff0c;即可完整打印文件内容及电子签章。留印。

(求一个整数各位数的和)编写程序,读取一个在0和1000之间的整数,并将该整数的各位数字相加。例如:整数是 932,各位数字之和为14。

(求一个整数各位数的和)编写程序&#xff0c;读取一个在0和1000之间的整数&#xff0c;并将该整数 的各位数字相加。例如:整数是 932&#xff0c;各位数字之和为14。 提示:利用操作符%分解数字,然后使用操作符/去掉分解出来的数字。例如: 932%10-2 932/10-93。下面是一个运行示…