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.pswp.cn/web/24276.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/24276.shtml
英文地址,請注明出處:http://en.pswp.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…

LeetCode-day05-3038. 相同分數的最大操作數目 I

LeetCode-day05-3038. 相同分數的最大操作數目 I 題目描述示例示例1&#xff1a;示例2&#xff1a; 思路代碼 題目描述 給你一個整數數組 nums &#xff0c;如果 nums 至少 包含 2 個元素&#xff0c;你可以執行以下操作&#xff1a; 選擇 nums 中的前兩個元素并將它們刪除。…

深度學習中2D檢測

深度學習中的2D目標檢測 2D目標檢測是深度學習中的一個關鍵任務&#xff0c;旨在識別圖像中的目標對象&#xff0c;并在每個目標對象周圍生成一個邊界框。該任務在自動駕駛、視頻監控、機器人視覺等領域具有廣泛應用。以下是對深度學習中2D目標檢測的詳細介紹&#xff0c;包括…

通過windbg查看dump文件中靜態變量的值

可以使用 WinDbg 和 SOS 擴展來查看它們。下面是如何使用 WinDbg 和 SOS 的步驟&#xff1a; 打開 WinDbg&#xff0c;并用它打開你的 dump 文件。你可以使用 File → Open Crash Dump 來實現。 在命令行中&#xff0c;加載 SOS 擴展。一般來說這可以通過 .loadby sos clr 來完…

Oracle EBS AP發票創建會計科目錯誤:子分類帳日記帳分錄未按輸入幣種進行平衡

系統版本 RDBMS : 12.1.0.2.0 Oracle Applications : 12.2.6 問題癥狀: 提交“創建會計科目”請求提示錯誤信息如下: 中文報錯: 該子分類帳日記帳分錄未按輸入幣種進行平衡。請檢查日記帳分錄行中輸入的金額。 英文報錯:The subledger journal entry does not balance i…

excel vlookup

Excel中的VLOOKUP函數用于在數據表中查找特定值&#xff0c;并返回該值所在行的另一個單元格中的值。這個函數非常有用&#xff0c;特別是在需要從一張表中查找信息并將其填充到另一張表中的情況下。VLOOKUP函數的基本語法是&#xff1a;VLOOKUP(查找值, 數據范圍, 返回值的…

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 所示。…

「前端+鴻蒙」鴻蒙應用開發簡介

鴻蒙應用開發是指使用華為鴻蒙操作系統&#xff08;HarmonyOS&#xff09;提供的API和開發工具&#xff0c;創建可以在鴻蒙設備上運行的應用程序。鴻蒙系統是華為開發的全場景、分布式操作系統&#xff0c;它支持多種設備類型&#xff0c;包括智能手機、平板電腦、智能電視、智…

Spring (45)Gateway

在計算機網絡中&#xff0c;一個網關&#xff08;Gateway&#xff09;是一個網絡節點&#xff0c;它充當不同網絡協議、應用程序或數據格式之間的轉換點。在微服務架構中&#xff0c;API網關&#xff08;API Gateway&#xff09;扮演著非常關鍵的角色&#xff0c;它是微服務和外…

電腦開機出現英文字母,如何解決這個常見問題?

電腦開機時出現英文字母的情況通常意味著系統在啟動過程中遇到了問題。這些英文字母可能是錯誤信息、系統提示或BIOS設置問題。通過理解這些信息并采取適當的措施&#xff0c;您可以解決大多數啟動問題。本文將介紹三種解決電腦開機出現英文字母問題的方法&#xff0c;幫助您恢…

智能合約中未授權訪問

未授權訪問&#xff1a; 如果智能合約對關鍵函數的訪問控制不足&#xff0c;攻擊者可能執行不應允許的操作&#xff0c;如修改合約狀態或提取資金。 未授權訪問示例 假設我們有一個智能合約&#xff0c;用于管理用戶的存款和提款。在這個例子中&#xff0c;合約沒有正確地限…

python使用appium打開程序后,為什么沒有操作后程序就自動退出了

當使用Appium打開應用程序并在沒有執行任何操作后它自動退出&#xff0c;這可能是由于幾個不同的原因。以下是一些可能的原因和相應的解決方案&#xff1a; 應用程序的默認行為&#xff1a; 有些應用程序在啟動后如果沒有用戶交互&#xff0c;可能會因為超時或其他邏輯而自動關…

BGP匯總+認證

一、BGP 的宣告問題 1、在 BGP 協議中每臺運行 BGP 的設備上&#xff0c;宣告本地直連路由 2、在 BGP 協議中運行 BGP 協議的設備來宣告.通過 IGP 學習到的&#xff0c;未運行 BGP 協議設備產2、生的路由&#xff1b; 在 BGP 協議中宣告本地路由表中路由條目時,將攜帶本地到達這…

Spring Boot集成geodesy實現距離計算

1.什么是geodesy&#xff1f; 浩瀚的宇宙中&#xff0c;地球是我們賴以生存的家園。自古以來&#xff0c;人類一直對星球上的位置和彼此的距離著迷。無論是航海探險、貿易往來還是科學研究&#xff0c;精確計算兩個地點之間的距離都是至關重要的。 Geodesy&#xff1a;大地測量…