創建線程的方法(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.pswp.cn/diannao/13357.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/13357.shtml
英文地址,請注明出處:http://en.pswp.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萬元人民幣。 技術條件 專業技術人員配備齊全、合理,滿足相應資質標準中對主要專業技術人員數量和專業的具體要求。通常包括但不限于室內設計、建筑、環境藝…