執行緒的建立

2021-08-17 09:21:46 字數 1176 閱讀 7303

執行緒在thread物件建立時開始啟動,傳遞給執行緒的函式執行結束時,執行緒也結束。

//執行緒thread建構函式:

template

explicit thread(_fn&& _fx, _args&&... _ax)

thread(thread&& _other) _noexcept

: _thr(_other._thr)

thread& operator=(thread&& _other) _noexcept

在啟動了執行緒之後,需要使用join()和detach()來確定主線程要等待執行緒結束還是讓其自主執行到結束。detach()相當於讓執行緒在後台執行

如果不等待執行緒結束,則要保證執行緒結束之前,可訪問資料的有效性!要解決這種情況,可以將資料複製到執行緒中。

乙個執行緒只能使用一次join(),一旦使用過join(),thread物件就不能再次加入了。

void foo(int i, const

string& s);

thread t(f00,3,"hello");

此時,**建立了乙個呼叫foo(3,」hello」)的執行緒。

當指向動態變數的指標作為引數傳遞給執行緒

因為thread的建構函式中使用了右值引用&&,所以可以接收乙個右值引數。使用std::move()可以強制把左值轉換成右值,因此可以理解為轉移執行緒的所有權,有點類似於剪下-貼上的操作。

實質上是把新的物件繫結原執行緒的記憶體塊,然後使原物件的繫結失效。

void fun();

thread t(fun);

thread t1 = std::move(t);

對於如上**,首先建立執行緒t,然後使用std::move()函式將t所擁有的執行緒轉移給t1,轉移之後該執行緒所有的資源都轉移給t1,t與該執行緒沒有任何關聯。

因為thread支援移動,當乙個函式返回乙個thread物件時,該物件就是乙個右值,因此新建立的執行緒物件可以利用該右值進行初始化。

std::thread f()

std::thread t = f();

甚至可以把執行緒傳入類進行操作

class

mythread

}

執行緒的建立

建立執行緒的幾種方法 1 createthread 執行緒執行函式必須是全域性的 使用方法 執行緒執行函式宣告 dword winapi threadproc lpvoid lpparam 建立執行緒 createthread null,0,threadproc,info i 0,dwthreadi...

執行緒的建立

執行緒的建立 1 使用createthread函式建立執行緒 handle createthread lpsecurity attributes lpsa,dword cbstack,lpthread start routine lpstartaddr,lpvoid lpvthreadparam,d...

執行緒的建立

include int pthread create pthread t thread,const pthread attr t attr,void start routine void void arg 1 引數及返回值 2 編譯注意事項 include include void printids...