Qtatomic int get并立即设置

时间:2018-08-23 06:23:17

标签: c++ qt atomic

我需要获取存储在atomic int(我想为QAtomicInteger)中的当前值,并立即将其重置为0。这是计数器。当一个线程递增该计数器时,我将在某个时刻获取另一个线程中的值,并立即重置该计数器,以确保对每个增量进行计数。

我该怎么做?

1 个答案:

答案 0 :(得分:1)

解决方案

为了获取存储在 QAtomicInt 中的值并立即为其分配另一个值,请使用QAtomicInteger::fetchAndStoreRelaxed

注意:您还可以根据所需的memory ordering使用其他可用的 fetchAndStore 方法。


示例

关于您要如何使用此值的大图,我为您准备了一个示例。

#include "Counter.h"
#include <QTimer>

Counter::Counter(QObject *parent) :
    QObject(parent),
    m_counter(new QAtomicInt()),
    m_counting(false)
{

}

int Counter::setValue(int value) const
{
    return m_counter->fetchAndStoreRelaxed(value);
}

void Counter::countFrom(int value, int delay)
{
    if (m_counting)
        return;

    m_counting = true;
    m_counter->store(value);

    auto *timer = new QTimer();

    timer->start(delay);

    connect(timer, &QTimer::timeout, [this](){
        m_counter->operator ++();
        changed(m_counter->load());
    });
}

完整示例由一个线程递增计数器组成。它还允许单击按钮即可读取计数器的值,立即将计数器重置为零。

可以从GitHub下载此示例的完整代码。