[英]How to use a thread member variable of a class c++
我想要一個線程變量作為這樣的類成員:
class Example{
public:
void startTask();
private:
std::thread m_taskThread;
}
我的問題是:
假設這個線程對象的創建會發生在startTask()
,那么這個線程對象的作用域是什么? 它會一直存在到Example
類對象像普通成員變量一樣被銷毀嗎? 或者它的范圍是那個特定方法( startTask()
)的范圍?
如果我希望這個線程與Example
對象一樣長,我應該在哪里調用.join()
生成的線程? 在Example
類的析構函數中?
一些材料( https://thispointer.com/c11-how-to-use-stdthread-as-a-member-variable-in-class/ )在線說如果我需要使用std,我應該創建僅移動類: :thread 作為成員變量,這是為什么?
將線程對象作為成員變量好不好? 原因?
假設這個線程對象的創建會發生在startTask()中,那么這個線程對象的作用域是什么? 它會一直存在到 Example 類對象像普通成員變量一樣被銷毀嗎? 或者它的范圍是那個特定方法(startTask())的范圍?
線程對象的范圍在 Example 對象的級別。 但是,在您調用 startTask() 之前,線程不會開始運行。 不要混淆擁有線程實例和正在運行的線程實例。
如果我希望這個線程與 Example 對象一樣長,我應該在哪里調用 .join() 生成的線程? 在 Example 類的析構函數中?
是的,你可以在析構函數中調用它,它是安全的。
一些材料( https://thispointer.com/c11-how-to-use-stdthread-as-a-member-variable-in-class/ )在線說如果我需要使用std,我應該創建僅移動類: :thread 作為成員變量,這是為什么?
因為 std::thread 不可復制,但它是可移動的。 所以你的示例類也不能復制。
將線程對象作為成員變量好不好? 原因?
是的,為什么不。 我認為這沒有問題。 您創建一個負責管理資源的類,即線程。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.