C++ 如何在C+中向grpc完成队列添加事件+;?

C++ 如何在C+中向grpc完成队列添加事件+;?,c++,grpc,C++,Grpc,我正在尝试实现一个异步GRPC服务器,每当客户端进行调用时,它都会得到一个不确定的消息流。我通读了官方文件。它不包括我希望为每个RPC保持流打开的场景。本条— 通过基本上将回调处理程序对象再次放入完成队列,解决了保持流打开的问题 文章建议: if (HasData()) { responder_.Write(reply_, this); } else { grpc::Alarm alarm; alarm.Set(completion_queue_, gpr_now(gpr

我正在尝试实现一个异步GRPC服务器,每当客户端进行调用时,它都会得到一个不确定的消息流。我通读了官方文件。它不包括我希望为每个RPC保持流打开的场景。本条— 通过基本上将回调处理程序对象再次放入完成队列,解决了保持流打开的问题

文章建议:

if (HasData())
{
    responder_.Write(reply_, this);
}
else
{
    grpc::Alarm alarm;
    alarm.Set(completion_queue_, gpr_now(gpr_clock_type::GPR_CLOCK_REALTIME), this);
}
我尝试使用本文中建议的报警对象方法,但由于某种原因,在完成队列的下一个
next
函数调用中,我得到的
ok
参数为false-
GPR\u断言(cq\u->next(&tag,&ok))。因此,我不得不关闭服务器,无法在流上等待进一步的数据可用

我能够很好地接收数据,直到未命中
else
案例

有人能帮我确定我可能做错了什么吗?我在GRPC上找不到很多C++资源。谢谢

  • 当报警超出范围时,它将生成一个Cancel(),使您得到!下一步中的ok()

  • 如果要使用此选项,则需要将警报放入类范围并触发它:

  • std::唯一的ptr报警;
    
    报警复位(新报警);
    报警->设置(cq、grpc超时时间、秒到截止时间(10),此设置);
    
    从Alarm::Set上的文档:

    在指定的时间点在完成队列cq上触发报警实例 时间

    一旦警报过期(截止日期)或取消(请参阅取消), 带有标记的事件将添加到cq。如果警报过期,则 事件的成功位为真,否则为假(即 取消)