我有两个线程在运行,生产者线程将具有不同类型的更新的并发队列(https://github.com/cameron314/readerwriterqueue.git)入队,另一个消费者线程将更新出队并根据更新类型执行不同的代码路径。这些更新必须按正确的顺序进行处理。

我不想使用任何不能通过CMake FetchContent快速链接的额外依赖项。

我想出了这个方法,但我想知道是否有更好的方法:

enum UpdateType {
    A,
    B
};

class Update {
    const std::shared_ptr<DataA> _dataA;
    const std::shared_ptr<DataB> _dataB;
    UpdateType _type;
public:
    Update(std::shared_ptr<DataA> dataA) : _dataA(std::move(dataA)) {
        _type = A;
    }
    Update(std::shared_ptr<DataB> dataB) : _dataB(std::move(dataB)) {
        _type = B;
    }
    UpdateType GetType() const { return _type; }
    std::shared_ptr<DataA> GetA() const { return _dataA; }
    std::shared_ptr<DataB> GetB() const { return _dataB; }
};

auto queue = moodycamel::BlockingReaderWriterQueue<std::shared_ptr<Update>>(200);

Update a(std::make_shared<DataA>(DataA()));
Update b(std::make_shared<DataB>(DataB()));

queue.enqueue(std::make_shared<Update>(a));
queue.enqueue(std::make_shared<Update>(b));

std::shared_ptr<Update> q;
queue.wait_dequeue(q);

switch (q->GetType())
{
case A:
    // Process A
    break;
case B:
    // Process B
    break;
}

转载请注明出处:http://www.zhongtian365.com/article/20230525/2460780.html

随机推荐

  1. 如何针对不同的函数多次调用requestAnimationFrame?

    我试着用画布绘制一个动画背景,同时监控滚动位置和平滑滚动(没有jquery),最后我多次调用requestAnimationFrame,这很快就减慢了网站的速度。我的app.js var delayTransition = 10; ...

  2. 针对不同的显示尺寸显示不同的img,只下载可见的img

    我在Angular中的一个组件上使用下面的html来显示基于用户屏幕大小的缩略图。div class=col-12 col-lg-3 col-md-6 col-sm-6 col-xs-12 img class=d-none d-sm-n...

  3. Access VBA函数针对不同的用户产生不同的结果

    我有一个通过宏运行的VBA模块。该代码对单个表运行5个查询,以计算5个不同的数量,并将它们放入发送给各方的电子邮件正文中。当我运行该模块时,它会在消息中生成正确的计数。当一个助理运行它时,查询将为五个计数中的每一个生成零。我们都使用Acce...

  4. 如何针对不同工作表的同一行上的值搜索和测试日期?

    我在试着创建一个考勤跟踪器。它接受玩家签到,并将它们与事件位置进行比较,以查看它们是否匹配。我有一个球员签到的列表,包括时间,日期和位置。以及事件列表,包括开始时间、日期和位置。我希望能够比较两个数据集,并搜索出球员是否在任何事件期间签到。...

  5. Excel中求和sum针对不同条件求和的公式使用汇总

    经常和Execl打交道的人肯定觉得求和公式是大家时常用到的。Excel里有哪几路求和公式呢?他们的使用方式又是怎样?我为大家汇总一下。 方法一、SUMIF()公式单条件求和 如要统计C列中的数据,要求统计条件是B列中数据为条件一。并将结...

  6. Xcode:针对不同配置的不同构建设置选项。为什么?

    在我的Xcode项目中,我正在查看Target Info“窗口中的Build”选项卡。在编译器设置列表中,对于我的大多数配置(“发布”、“分发”和“即席”),都有一个名为GCC 4.2 -预处理“的设置部分。当我切换到Debug“配置时,这...

  7. Node.js -针对不同路由的不同身份验证中间件和cors

    只有当中间件与路由匹配时,我如何应用它?文件app.jsconst routers = require(./routers); app.use(routers);复制文件routers/index.jsrouter.use(/first, ...

  8. Scala方式针对不同环境选择配置

    我的应用程序需要从资源目录或s3读取配置文件。对于本地开发,我需要从本地资源目录中读取它。因此,在构建项目时,我没有将配置文件config.properties放入我的应用程序jar文件中。在这种情况下,它应该从S3读取配置。当我想到要这样...

  9. Spring Boot针对不同模块的健康检查

    我已经创建了一个具有多个模块的程序,其中4个模块具有rest控制器。我想使用spring boot执行器创建一个健康检查,以便对模块的所有依赖项进行详细检查,包括带有rest控制器的模块。目前,我可以很容易地显示数据库,但对于4个模块中的每...

  10. 双十二针对不同的淘宝店铺和产品 淘宝客佣金该怎么设置?

    双11已过,双12就靠淘宝客推广来引爆高潮啦!还不了解?真的要错失大把流量和客户了,赶紧查看脚本之家针对不同的店铺、产品,淘宝客佣金比例设置也是不一样的,这里就和大家举几个例子分享下淘宝客的佣金设置技巧: 1、新店 新店的销量基础、卖家信...