簡體   English   中英

如何使用類c++的線程成員變量

[英]How to use a thread member variable of a class c++

我想要一個線程變量作為這樣的類成員:

class Example{
    public:
        void startTask();
    private:
        std::thread m_taskThread;
}

我的問題是:

  1. 假設這個線程對象的創建會發生在startTask() ,那么這個線程對象的作用域是什么? 它會一直存在到Example類對象像普通成員變量一樣被銷毀嗎? 或者它的范圍是那個特定方法( startTask() )的范圍?

  2. 如果我希望這個線程與Example對象一樣長,我應該在哪里調用.join()生成的線程? Example類的析構函數中?

  3. 一些材料( https://thispointer.com/c11-how-to-use-stdthread-as-a-member-variable-in-class/ )在線說如果我需要使用std,我應該創建僅移動類: :thread 作為成員變量,這是為什么?

  4. 將線程對象作為成員變量好不好? 原因?

假設這個線程對象的創建會發生在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM