執行緒在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...