windows系統中創建線程常用哪幾個函數,有什么區別?

windows系統中創建線程常用哪幾個函數?

在windows系統中創建線程的函數有:

CreadThread,AfxBeginThread,_beginthread,_beginthreadex。

?

他們的區別在于使用的場景不同。

?

CreateThread是Windows的API函數(SDK函數的標準形式,直截了當的創建方式,任何場合都可以使用),提供操作系統級別的創建線程的操作,且僅限于工作者線程。不調用MFC和RTL的函數時,可以用CreateThread,其它情況不要輕易。在使用的過程中要考慮到進程的同步與互斥的關系(防止死鎖)。線程函數定義為:DWORD WINAPI _yourThreadFun(LPVOID pParameter)。但它沒有考慮:
(1)C Runtime中需要對多線程進行紀錄和初始化,以保證C函數庫工作正常(典型的例子是strtok函數)。
(2)MFC也需要知道新線程的創建,也需要做一些初始化工作(當然,如果沒用MFC就沒事了)。???

AfxBeginThread:MFC中線程創建的MFC函數,首先創建了相應的CWinThread對象,然后調用CWinThread::CreateThread,?? 在CWinThread::CreateThread中,完成了對線程對象的初始化工作,然后,調用_beginthreadex(AfxBeginThread相比較更為安全)創建線程。它簡化了操作或讓線程能夠響應消息,即可用于界面線程,也可以用于工作者線程,但要注意不要在一個MFC程序中使用_beginthreadex()或CreateThread()。線程函數定義為:UINT _yourThreadFun(LPVOID pParam)

_beginthreadex:MS對C Runtime庫的擴展SDK函數,首先針對C Runtime庫做了一些初始化的工作,以保證C Runtime庫工作正常。然后,調用CreateThread真正創建線程。? 僅使用Runtime Library時,可以用_BegingThread。

小節:

? ? 實際上,這三個函數之間存在一定的調用關系,第一個純粹一些,后兩個完成自己相應的工作之后,調用前者實現線程的創建。其中CreateThread是由操作系統提供的接口,而AfxBeginThread和_BeginThread則是編譯器對它的封裝。

? ? 用_beginthreadex()、_endthreadex函數應該是最佳選擇,且都是C Run-time Library中的函數,函數的參數和數據類型都是C Run-time Library中的類型,這樣在啟動線程時就不需要進行Windows數據類型和C Run-time Library中的數據類型之間的轉化,從而,減低了線程啟動時的資源消耗和時間的消耗。但使用_beginthread,無法創建帶有安全屬性的新線程,無法創建暫停的線程,也無法獲得 線程ID,_endthread的情況類似,它不帶參數,這意味這線程的退出代碼必須硬編碼為0。

? ? MFC也是C++類庫(只不過是Microsoft的C++類庫,不是標準的C++類庫),在MFC中也封裝了new和delete兩中運算符,所以用到new和delete的地方不一定非要使用_beginthreadex() 函數,用其他兩個函數都可以。
?

? ? 理解了這些,就知道什么時候該用什么函數創建線程了。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/256984.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/256984.shtml
英文地址,請注明出處:http://en.pswp.cn/news/256984.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java.lang.String小測試

還記得java.lang.String么,如果現在給你一個小程序,你能說出它的結果么 1 public static String ab(String a){2 return a "b";3 }4 5 public static void testAb(){6 String x "a";7 ab…

Oracle傳輸表空間

一、簡介 可傳輸表空間(還有個集)最大的優勢是其速度比export/import或unload/load要快的多。因為可傳輸表空間主要是復制數據文件到目標路徑,然后再使用export/import或Data Pump export/import等應用僅導出/導入表空間對象的元數據到新數據庫。 (1&…

進程控制塊PCB結構體 task_struct 描述

進程控制塊,英文名(Processing Control Block),簡稱 PCB 。 進程控制塊是系統為了管理進程設置的一個專門的數據結構,主要表示進程狀態。 每一個進程都對應一個PCB來維護進程相關的信息; 在Linux中&#xf…

基于OpenCV與tensorflow實現實時手勢識別

基于OpenCV與tensorflow object detection API使用遷移學習,基于SSD模型訓練實現手勢識別完整流程,涉及到數據集收集與標注、VOC2012數據集制作,tfrecord數據生成、SSD遷移學習與模型導出,OpenCV攝像頭實時視頻流讀取與檢測處理&a…

學習筆記(25):Python網絡編程并發編程-Thread其他屬性和守護線程

立即學習:https://edu.csdn.net/course/play/24458/296440?utm_sourceblogtoedu 1.Thread其他的屬性 CurrentThread().getName():獲得當前線程的名字 t.is_Alive:判斷線程是否還在運行 t.join():等待線程運行結束再執行join后面的代碼 t.setName("name"):為線程…

AIX主機信任關系配置

1.配置主機信任關系的時候,需要先在兩臺主機/etc/hosts文件中添加要信任主機的IP,假設有(192.168.8.190 aix190,192.168.8.191 aix191)2個主機,在191主機配置如下所示 192.168.8.190 aix190 2.如果系統配置DNS,則需要去…

Sprint2團隊貢獻分

團隊貢獻分: 郭志豪:31% http://www.cnblogs.com/gzh13692021053/ 楊子健:22%http://www.cnblogs.com/yzj666/ 譚宇森:23%http://www.cnblogs.com/yzj666/ 劉森松:24% http://www.cnblogs.com/lssh/轉載于:https://w…

學習筆記(26):Python網絡編程并發編程-GIL與自定義互斥鎖的區別

立即學習:https://edu.csdn.net/course/play/24458/296443?utm_sourceblogtoedu 1.GIL的基本概念 答:GIL本質上就是一把鎖,只是他是一把在python解釋器上的鎖 2.GIL與互斥鎖的區別 答: 1)GIL保護的是在python解釋器上的參數&a…

多目標跟蹤檢測

方法: 1、實時性,每幀視頻10ms 2、方法,首先深度學習檢測到目標,然后再寫跟蹤算法

2014年最具人氣國外WORDPRESS主題

在國外,WrodPress這個博客系統極為受歡迎,使用WordPress來建站可以降低很多成本,另外還能以十分便宜的價格獲得一個漂亮的WP網站模板。 今天向大家分享來自Themeforest 2014年最具人氣的高級WrodPress主題,這些主題無論是設計還是…

軟件工程學習感想

通過這半學期我對軟件工程的學習,從軟件工程的基礎到考試用戶的需求分析與求解,最后到黑盒白盒測試通過自身做過的一些案例,講解了軟件工程這門本身枯燥乏味的課程,這不僅增強了學生學習的積極性,也通過讓我們自己去做…

開源視覺salm算法介紹

當前的開源SLAM方案 開源方案傳感器形式地址鏈接MonoSLAM單目https://github.com/hanmekim/SceneLib2 PTAM單目 http://www.robots.ox.ac.uk/~gk/PTAM/ORB-SLAM 單目為主http://webdiis.unizar.es/~raulmur/orbslam/ORB-SLAM2單目https://github.com/raulmur/ORB_SLAM2LSD-SLAM…

學習筆記(27):Python網絡編程并發編程-GIL與多線程

立即學習:https://edu.csdn.net/course/play/24458/296444?utm_sourceblogtoedu GIL與多線程 1.須知: 1)cpu主要是為了提升計算性能,增加CPU提升計算性能; 2)每一個CPU一旦遇到阻塞狀態都會處于等待狀態&#xff0c…

J0ker的CISSP之路:復習-Access Control(3)

本文同時發表在:[url]http://netsecurity.51cto.com/art/200801/63649.htm[/url] 在《J0ker的CISSP之路》系列的上一篇文章里,J0ker給大家介紹了訪問控制CBK里面一些常見的破壞信息資產保密性的威脅類型,那么什么類型的威脅會破壞信息資產的完…

C#中對泛型List進行分組輸出元素

背景:在輸出列表時,往往需要按照某一字段進行分組,比如在輸出城市列表時,按照首字母進行分組,輸出學生列表時,按照年級進行分組,然后再對分組的結果按照其他的字段進行排序。 如存在以下STU學生…

分頁3

http://www.cnblogs.com/ChrisLee2011/p/4288194.html 頁面的HTML部分如下&#xff1a; < div class "tableContainer"> < input id "currentPage" type "hidden" value " ViewData[ "currentPage"] "/> < i…

最優化課堂筆記01: 第一章 最優化的基本概念

第一章 最優化的基本概念 1.最優化求解的數學模型建立 2.例題&#xff08;考試第一大題&#xff1a;數學模型建立&#xff09; 解析&#xff1a;優化變量、目標函數&#xff08;一般取最小化&#xff09;、約束條件 注意&#xff1a; 1&#xff09;約束條件一般形式為&#…

面向對象中構造函數的小練習

//寫一個Ticket類&#xff0c;有一個距離屬性&#xff08;本屬性只讀&#xff0c;在構造方法中賦值&#xff09;&#xff0c;不能為負數//有一個價格屬性&#xff0c;價格屬性為只讀&#xff0c;并且根據距離distance計算價格Price(1元/公里)//0--100公里 票價不打折//101-20…

EIGRP非等價負載均衡

1、等價負載均衡 當到達目的地有多條路徑時&#xff0c;而有多條路徑的metric值一樣&#xff0c;這時就可以做等價負載均衡&#xff0c;讓數據包均衡轉發&#xff0c;不過要看該路由器的轉發方式&#xff0c;如果是快速轉發方式&#xff0c;這種方式無用&#xff08;本地產生的…

ubuntu100%快速安裝搜狗輸入法

1、進入搜狗官方網站&#xff0c;下載最新版本的for ubuntu輸入法deb安裝包 2、下載完成以后&#xff0c;進入下載好的文件目錄&#xff0c;在空白處點擊鼠標右鍵&#xff0c;打開終端 在終端窗口輸入如下的指令開始安裝搜狗拼音輸入法。 #sudo dpkg -i sogoupinyin_2.2.0.01…