繁体   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