thread
類別
定義一個物件,用來觀察和管理應用程式內執行的執行緒。
語法
class thread;
備註
您可以使用 thread
物件,來觀察和管理應用程式內執行的執行緒。 thread
使用預設建構函式所建立的物件不會與任何執行線程相關聯。 thread
使用可呼叫物件所建構的物件會建立新的執行線程,並呼叫該 thread
中的可呼叫物件。 Thread
物件可以移動,但無法複製,這就是為什麼執行線程只能與一個 thread
對象相關聯。
執行的每個執行緒都有 thread::id
類型的唯一識別碼。 函式 this_thread::get_id
會傳回呼叫執行緒的識別碼。 成員函式 thread::get_id
會傳回 物件所 thread
管理之線程的標識碼。 對於預設建構 thread
的物件, thread::get_id
方法會傳回物件,其值與所有預設建構 thread
物件的值相同,且與呼叫時可聯結之任何線程所傳回 this_thread::get_id
的值不同。
成員
公用類別
名稱 | 描述 |
---|---|
id |
可唯一識別相關聯的執行緒。 |
公用建構函式
名稱 | 描述 |
---|---|
thread |
建構 thread 物件。 |
公用方法
名稱 | 描述 |
---|---|
detach |
從 thread 物件中斷連結相關聯的執行緒。 |
get_id |
傳回相關聯執行緒的唯一識別碼。 |
hardware_concurrency |
靜態。 傳回硬體執行緒內容的估計數目。 |
join |
封鎖,直到相關聯的執行緒完成為止。 |
joinable |
指定是否「可加入」相關聯的執行緒。 |
native_handle |
傳回代表執行緒控制代碼的實作特定類型。 |
swap |
與指定 thread 物件交換物件狀態。 |
公用運算子
名稱 | 描述 |
---|---|
thread::operator= |
將執行緒關聯至目前的 thread 物件。 |
需求
頁眉: <thread>
命名空間:std
detach
中斷連結相關聯的執行緒。 作業系統會變成負責在終止時釋放執行緒資源。
void detach();
備註
呼叫 detach
之後,後續會呼叫 以傳 get_id
回 id
。
如果與呼叫物件相關聯的線程無法聯結,函式會擲回 system_error
具有 錯誤碼的 invalid_argument
。
如果與呼叫物件相關聯的執行緒無效,函式會擲回 system_error
,且錯誤碼為 no_such_process
。
get_id
取得相關聯執行緒的唯一識別碼。
id get_id() const noexcept;
傳回值
物件,可唯一 id
識別關聯的線程,如果沒有 id()
與物件建立關聯的線程,則為 。
hardware_concurrency
靜態方法,會傳回硬體執行緒內容的估計數目。
static unsigned int hardware_concurrency() noexcept;
傳回值
硬體執行緒內容的估計數目。 如果無法計算或未妥善定義值,這個方法會傳回 0。
Microsoft 特定的
hardware_concurrency
目前已定義傳回邏輯處理器數目,其對應至可同時執行的硬體線程數目。 它會考慮實體處理器數目、每個實體處理器中的核心數目,以及每個單一核心同時進行多線程處理。
不過,在超過 64 個邏輯處理器的系統上,此數目會依單一群組中的邏輯處理器數目來限制;請參閱 處理器群組。
id
類別
針對程序中執行的每個執行緒提供唯一識別碼。
class thread::id {
id() noexcept;
};
備註
默認建構函式會建立不等於 thread::id
任何現有線程之 對象的物件。
所有預設建構的 thread::id
物件都會比較是否相等。
join
封鎖,直到與呼叫物件相關聯之執行的執行緒完成為止。
void join();
備註
如果呼叫成功,則呼叫對象的後續呼叫get_id
會傳回與任何現有線程相等thread::id
的預設值thread::id
;如果呼叫不成功,則傳get_id
回的值不會變更。
joinable
指定是否「可加入」相關聯的執行緒。
bool joinable() const noexcept;
傳回值
true
如果相關聯的線程可聯結,則為 ;否則為 false
。
備註
如果 get_id() != id()
為,線程對像是可聯結的。
native_handle
傳回代表執行緒控制代碼的實作特定類型。 您可以利用實作特定的方式來使用執行緒控制代碼。
native_handle_type native_handle();
傳回值
native_handle_type
會定義為 Win32 HANDLE
,這會轉換為 void *
。
thread::operator=
將指定物件的執行緒關聯至目前的物件。
thread& operator=(thread&& Other) noexcept;
參數
Other
thread
物件。
傳回值
*this
備註
如果呼叫物件是可加入的,方法即會呼叫 detach。
建立關聯之後,會將 Other
設為預設建構狀態。
swap
與指定 thread
物件的狀態交換物件狀態。
void swap(thread& Other) noexcept;
參數
Other
thread
物件。
thread
建構函式
建構 thread
物件。
thread() noexcept;
template <class Fn, class... Args>
explicit thread(Fn&& F, Args&&... A);
thread(thread&& Other) noexcept;
參數
F
由執行緒執行的應用程式定義函式。
A
要傳遞至 F
的引數清單。
Other
現有的 thread
物件。
備註
第一個建構函式會建構未關聯至執行之執行緒的物件。 針對建構物件呼叫 get_id
所傳回的值是 thread::id()
。
第二個建構函式會建構與執行新線程相關聯的 物件,並執行 中<functional>
定義的虛擬函式INVOKE
。 如果沒有足夠的資源可以啟動新的線程,函式會 system_error
擲回具有 錯誤碼的物件 resource_unavailable_try_again
。 如果的 F
呼叫以未攔截的例外狀況終止, terminate
則會呼叫 。
第三個建構函式會建構與 Other
相關聯之執行緒相關聯的物件。 接著會將 Other
設為預設建構狀態。
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應