CreateThread函數

創建一個在調用進程的虛擬地址空間內執行的線程。

要創建在另一個進程的虛擬地址空間中運行的線程,請使用 CreateRemoteThread函數。

語法

HANDLE CreateThread(LPSECURITY_ATTRIBUTES   lpThreadAttributes,SIZE_T                  dwStackSize,LPTHREAD_START_ROUTINE  lpStartAddress,__drv_aliasesMem LPVOID lpParameter,DWORD                   dwCreationFlags,LPDWORD                 lpThreadId
);

參數

  • lpThreadAttributes

指向SECURITY_ATTRIBUTES 結構的指針,該結構確定子進程是否可以繼承返回的句柄。如果 lpThreadAttributesNULL,則無法繼承句柄。

結構的lpSecurityDescriptor成員為新線程指定安全描述符。如果lpThreadAttributes為NULL,則線程獲取默認安全描述符。線程的默認安全描述符中的ACL來自創建者的主要標志。

  • dwStackSize

堆棧的初始大小,以字節為單位。系統將此值四舍五入到最近的頁面。如果此參數為零,則新線程使用可執行文件的默認大小。有關更多信息,請參閱線程堆棧大小。

  • lpStartAddress

指向由線程執行的應用程序定義函數的指針。該指針表示線程的起始地址。有關線程函數的更多信息,請參見 ThreadProc

  • lpParameter

指向要傳遞給線程的變量的指針。

  • dwCreationFlags

控制線程創建的標志。

含義
0該線程在創建后立即運行。
CREATE_SUSPENDEDs 0x00000004線程是在掛起狀態下創建的,并且在調用ResumeThread函數之前不會運行 。
STACK_SIZE_PARAM_IS_A_RESERVATION 0x00010000在所述dwStackSize參數指定堆棧的初始保留大小。如果未指定此標志,則dwStackSize指定提交大小。

  • lpThreadId

指向接收線程標識符的變量的指針。如果此參數為 NULL,則不返回線程標識符。

返回值

如果函數成功,則返回值是新線程的句柄。

如果函數失敗,則返回值為NULL。要獲取擴展錯誤信息,請調用 GetLastError。

請注意,即使lpStartAddress指向數據,代碼或無法訪問,CreateThread也可能成功 。如果線程運行時起始地址無效,則發生異常,并且線程終止。由于無效的起始地址導致的線程終止被視為線程進程的錯誤退出。此行為類似于CreateProcess的異步特性,即使它引用無效或缺少動態鏈接庫(DLL),也會創建該進程。

備注

進程可以創建的線程數受可用虛擬內存的限制。默認情況下,每個線程都有一兆字節的堆棧空間。因此,您最多可以創建2,048個線程。如果減小默認堆棧大小,則可以創建更多線程。但是,如果為每個處理器創建一個線程并構建應用程序隊列,應用程序維護上下文信息,則應用程序將具有更好的性能。在處理下一個隊列中的請求之前,線程將處理隊列中的所有請求。

使用THREAD_ALL_ACCESS訪問權限創建新的線程句柄。如果在創建線程時未提供安全描述符,則使用創建線程的進程的主令牌為新線程構造默認安全描述符。當調用者嘗試使用OpenThread函數訪問該線程時,將根據此安全描述符評估調用者的有效令牌以授予或拒絕訪問權限。

調用GetCurrentThread 函數時,新創建的線程對自身具有完全訪問權限。

Windows Server 2003: 線程對自身的訪問權限是通過根據為線程構造的默認安全描述符評估創建線程的進程的主令牌來計算的。如果在遠程進程中創建線程,則使用遠程進程的主令牌。因此,在調用GetCurrentThread時,新創建的線程可能會減少對自身的訪問權限。某些訪問權限(包括THREAD_SET_THREAD_TOKENTHREAD_GET_CONTEXT)可能不存在,從而導致意外故障。因此,建議不要在模仿其他用戶時創建線程。

如果線程是在可運行狀態下創建的(即,如果未使用CREATE_SUSPENDED標志),則線程可以在CreateThread返回之前開始運行,特別是在調用者接收到創建的線程的句柄和標識符之前。

線程執行從lpStartAddress參數指定的函數開始。如果此函數返回,則DWORD返回值用于在對ExitThread函數的隱式調用中終止線程 。使用 GetExitCodeThread函數獲取線程的返回值。

創建的線程的線程優先級為THREAD_PRIORITY_NORMAL。使用 GetThreadPriority和 SetThreadPriority函數來獲取和設置線程的優先級值。

當線程終止時,線程對象獲得信號狀態,滿足在對象上等待的任何線程。

線程對象保留在系統中,直到線程終止并且通過調用CloseHandle關閉了它的所有句柄。

ExitProcess, ExitThread, CreateThread, CreateRemoteThread的功能,以及正在啟動的處理(如通過一個調用的結果 CreateProcess)的過程中是彼此之間串行化。這些事件中只有一個可以一次發生在地址空間中。這意味著以下限制包含:

在進程啟動和DLL初始化例程期間,可以創建新線程,但是在為進程執行DLL初始化之前它們不會開始執行。
進程中只有一個線程可以一次處于DLL初始化或分離例程中。
在DLL初始化或分離例程中沒有線程之前,ExitProcess不會完成。
調用C運行時庫(CRT)的可執行文件中的線程應使用_beginthreadex和_endthreadex函數進行線程管理,而不是 CreateThread和 ExitThread ; 這需要使用CRT的多線程版本。如果使用CreateThread創建的線程調用CRT,則CRT可以在低內存條件下終止進程。
Windows Phone 8.1: Windows Phone 8.1及更高版本上的Windows Phone應用商店支持此功能。

Windows 8.1和Windows Server 2012 R2:Windows 8.1,Windows Server 2012 R2及更高版本上的Windows應用商店應用程序支持此功能。

例子
有關示例,請參閱 創建線程。

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

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

相關文章

nginx 的請求處理、請求的處理流程

nginx的請求處理 前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 nginx使用一個多進程模型來對外提供服務,其中一個master進程,多個worker進程。master進程負責…

如何控制油門更準確?

學員問:平時練車還不錯,可是一換車就容易加大油門,有什么方法能很好的控制油呢?? 如何控制油門更準確?和調的座位有關系嗎?? 答:油門跟剎車被視為汽車控制的靈魂。汽車發…

使用線程——創建線程

CreateThread函數創建一個進程的新的線程。創建線程必須指定新線程要執行的代碼的起始地址。通常,起始地址是程序代碼中定義的函數的名稱(有關更多信息,請參閱ThreadProc)。此函數采用單個參數并返回DWORD值。一個進程可以讓多個線…

location

location (地址): 是瀏覽器 window 上的一個對象,不僅能處理當前頁面的網絡地址,還可以實現頁面間的跳轉 頁面的跳轉: 為什么使用它? 使我們也可以通過腳本語言,也能實現 a 鏈接,同樣的效果&…

linux :Docker 方式 安裝 zookeeper、阿里服務器上 Docker 運行 zookeeper

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 1. 查找官方鏡像,并下載鏡像: # 搜索鏡像: docker search zookeeper# 拉取鏡像:docker …

使用線程池功能

此示例創建自定義線程池,創建工作項和線程池計時器,并將它們與清理組關聯。該池由一個持久性線程組成。它演示了以下線程池函數的使用: CloseThreadpool CloseThreadpoolCleanupGroupCloseThreadpoolCleanupGroupMembersCloseThreadpoolWait…

制動剎車片六個養護要點

剎車片屬于消耗品,在使用中會逐漸磨損,當磨損到極限位置時,必須更換,否則將降低制動的效果,甚至造成安全事故。 制動剎車片關乎生命安全,必須謹慎對待。 大多數轎車采用前盤后鼓式制動器結構,一…

Learn day4 函數參數\變量\閉包\遞歸

1.函數描述 # ### 函數 """ (1)函數的定義:功能 (包裹一部分代碼 實現某一個功能 達成某一個目的) (2)函數特點:可以反復調用,提高代碼的復用性,提高開發效率,便于維護管理 """# (3) 函數的基本格式 """ # 函數的定義處 def fun…

Java 中去除字符串中空格的方法

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 1、方法分類 str.trim(); //去掉首尾空格str.replace(" ",""); //去除所有空格,包括首尾、中間str.re…

使用重定向的輸入和輸出創建子進程

本主題中的示例演示如何使用控制臺進程中的CreateProcess函數創建子進程。它還演示了一種使用匿名管道重定向子進程的標準輸入和輸出句柄的技術。請注意,命名管道也可用于重定向進程I / O. 所述CreatePipe函數使用SECURITY_ATTRIBUTES結構來創建可繼承句柄讀寫兩個…

手動擋停車時掛檔有技巧

徐小姐來電:我家的汽車要年檢了,前幾天,工作人員幫我把車子開進檢測站去檢測,開回來后停在原位上,然后把鑰匙交給我。我拿鑰匙一點火,車子就突然往前動了,根本沒有時間反應,已經撞到…

LOJ 3156: 「NOI2019」回家路線

題目傳送門&#xff1a;LOJ #3156。 題意簡述&#xff1a; 有一張 \(n\) 個點 \(m\) 條邊的有向圖&#xff0c;邊有兩個權值 \(p_i\) 和 \(q_i\)&#xff08;\(p_i<q_i\)&#xff09;表示若 \(p_i\) 時刻在這條邊的起點&#xff0c;則 \(q_i\) 時刻能到達這條邊的終點。 你需…

線程池概述

線程池 一個線程池的工作線程代表應用程序的高效執行異步回調的集合。線程池主要用于減少應用程序線程的數量并提供工作線程的管理。應用程序可以對工作項進行排隊&#xff0c;將工作與可等待的句柄相關聯&#xff0c;根據計時器自動排隊&#xff0c;并與I / O綁定。 線程池架…

WEB 請求處理二:Nginx 請求 反向代理

上一篇《WEB請求處理一&#xff1a;瀏覽器請求發起處理》&#xff0c;我們講述了瀏覽器端請求發起過程&#xff0c;通過DNS域名解析服務器IP&#xff0c;并建立TCP連接&#xff0c;發送HTTP請求。本文將講述請求到達反向代理服務器的一個處理過程&#xff0c;比如&#xff1a;在…

方向盤的正確駕馭方法

如果問您油門踏板和方向盤哪個與駕駛員最“親密”&#xff0c;您會選擇誰呢&#xff1f;恐怕還是方向盤吧。如果汽車行駛過程中您的雙手同時離開了方向盤&#xff0c;那么事故的隱患也就隨之而來。下面我們就為您全面介紹汽車方向盤的正確使用方法。專家介紹&#xff0c;握方向…

SQL server 2005中無法新建作業(Job)的問題

客戶端是使用企業管理其&#xff08;Management Studio&#xff09;新建job&#xff0c;總是無法創建&#xff0c;查找了很多資料&#xff0c;有的說是需要sp2, 但有的又說不是... ... 沒有時間去研究為什么&#xff0c;但確有一種方法解決&#xff1a;到服務器端去創建job&…

線程池API

線程池API 線程池應用程序編程接口&#xff08;API&#xff09;使用基于對象的設計。以下每個對象都由用戶模式數據結構表示&#xff1a; 池對象是一組可用于執行工作的工作線程。每個進程可以根據需要創建具有不同特征的多個隔離池。每個進程都有一個默認池。清理組與一組回…

WEB 請求處理 一:瀏覽器 請求發起處理

最近&#xff0c;終于要把《WEB請求處理系列》提上日程了&#xff0c;一直答應小伙伴們給分享一套完整的WEB請求處理流程&#xff1a;從瀏覽器、Nginx、Servlet容器&#xff0c;最終到應用程序WEB請求的一個處理流程&#xff0c;前段時間由于其他工作事情的安排&#xff0c;一直…

離合器半聯動探秘

離合器踏板作用是切斷發動機和變速箱之間的動力&#xff0c;有利于起步、變速、和停車。那么如何更好的使用它呢&#xff1f; 離合器的五種狀態示意圖 離合器半聯動的使用方法揭密如下&#xff1a; 離合器半聯動的使用探密之一 將離合器抬到車開始動時你就別再抬了&#xff0c;…

Biztalk Server 2006安裝配置

前段時間收到了來自beta.microsoft.com的BTS20006 Beta2的下載地址&#xff0c;這兩天對它進行了一番安裝配置。下面把一些經過和步驟和大家分享一下&#xff0c;手中有一些去年的Biztalk Server2004版本的培訓資料&#xff0c;里面有11個Lab。需要的朋友請留下mail&#xff0c…