c++ - Qt atomic int 获取并立即设置

标签 c++ qt atomic

我需要获取存储在 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/

相关文章:

Java 并发与原子类

java - 通过引用延迟初始化的非 volatile 字符串进行访问是线程安全的吗?

c++ - C、编译错误和指针

c++ - 在 Qt 中设计具有自动缩放字体大小的用户界面

c++ - CMake & QT5 - QT5_WRAP_UI 不生成 ui 头文件

qt - 在 QT Creator 的调色板编辑器中编辑小部件的背景颜色

c - 执行原子操作的函数

C++:合并两个以元组为元素的 vector

c++ - 在 C++ 结构创建中执行更快

c++ - 如何同时验证小写和大写字母