我需要获取存储在atomic int(我想为QAtomicInteger)中的当前值,并立即将其重置为0。这是计数器。当一个线程递增该计数器时,我将在某个时刻获取另一个线程中的值,并立即重置该计数器,以确保对每个增量进行计数。
我该怎么做?
答案 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下载此示例的完整代码。