簡體   English   中英

可變線程與非const方法

[英]mutable thread vs non-const method

我有一個類,我想在一個線程中調用一個方法。

我的方法不修改類attributs所以我希望它們是const,但是它們實例化一個線程,所以它們不能。

放入std :: thread可變,刪除const因為線程, 編輯:或使用分離線程之間的最佳選擇是什么?

class ValidationSound
{
public:
    [... CTOR DTOR ...]

    void emitSuccessSoundAsync() const 
    {
        if(m_thread.joinable())
        {
          m_thread.join();
        }
        m_thread = std::thread(&ValidationSound::emitSound, this, std::cref(m_bipsParameters.first));
    };

    void emitFailureSoundAsync() const
    {
        if(m_thread.joinable())
        {
          m_thread.join();
        }
        m_thread = std::thread(&ValidationSound::emitSound, this, std::cref(m_bipsParameters.second));
    };

    void emitSound(const BipParameters& bipParam) const
    {
        //BIP BIP THE BUZZER
    };

private:
    std::pair<BipParameters, BipParameters> m_bipsParameters;
    mutable std::thread m_thread;
};

我的方法不修改類attributs所以我希望它們是const,但是它們實例化一個線程,所以它們不能。

但是您的方法修改類屬性。 你的std :: thread是一個類屬性,一旦你的任何方法被調用,該屬性將改變(開始運行)並繼續改變狀態,即使在方法退出之后。

放入std :: thread可變,刪除const因為線程,編輯:或使用分離線程之間的最佳選擇是什么?

在這種情況下,我建議從方法簽名中刪除const。 Const只是混淆了界面,可能會讓用戶誤以為它是線程安全的。 如果這些方法在線程執行時間內受到互斥保護和阻塞,那么你可以為mutable和const做一個更強的參數,但考慮到你當前的實現,我不會。

編輯:換句話說,想象一下你已經完成並創建了ValidationSound類的單個const實例。 對於這個類的用戶來說,以一種創建許多線程的方式調用你的實例將非常容易,這些線程在不同的時間交錯播放不同的聲音。 那你是如何設想這個類的const實例表現的? 這當然不是我想象它純粹在界面上的看法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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