我需要获取存储在 atomic int(我想是 QAtomicInteger)中的当前值并立即将其重置为 0。这就是计数器。当一个线程递增此计数器时,我将在某个时刻获取另一个线程中的值并立即重置此计数器以确保计算每个增量。
我该怎么做?
最佳答案
解决方案
为了获取存储在 QAtomicInt 中的值并立即为其分配另一个值,请使用 QAtomicInteger::fetchAndStoreRelaxed .
注意:您还可以使用另一种可用的 fetchAndStore 方法,具体取决于 memory ordering你需要。
例子
至于你想如何使用这个值,我已经为你准备了一个例子。
#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下载。 .
关于c++ - Qt atomic int 获取并立即设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51979467/