c++ - C++ grpc 的一些变量问题
问题描述
我有 grpc 服务,它包装了一些第三个库函数。被调用库的类是T_Upt
. 什么时候_upt->GetState
被调用Status TerminalService::GetState
是空state
的。如果我将调用移至构造函数_upt->GetState
TerminalService::TerminalService(): _upt(std::make_unique<T_Upt>())
{
T_UptState state{};
_upt->GetState(&state);
std::cout << state.cbTerminalID << std::endl;
}
那么一切都很好。比如为什么?我尝试过使用不同的方法std::move
,或者T_Upt*
相反,没有任何效果。不确定它是否重要,但该库是单线程的,但这应该不是问题,因为我没有使用RegisterAsyncGenericService
.
完整代码如下
服务.h
class TerminalService final : public TerminalGrpcService::Service
{
public:
TerminalService();
Status Cancel(ServerContext* context, const CancelRequest* request, CancelReply* response) override;
private:
std::unique_ptr<T_Upt> _upt;
};
服务.cpp
TerminalService::TerminalService(): _upt(std::make_unique<T_Upt>())
{
}
Status TerminalService::GetState(ServerContext* context, const ::GetStateRequest* request,
GetStateReplay* response)
{
T_UptState state{};
const bool result = this->_upt->GetState(&state);
response->set_result(result);
response->set_terminalid(std::string(state.cbTerminalID));
return Status::OK;
}
主要的
int main()
{
const std::string address("127.0.0.1:1111");
TerminalService service;
ServerBuilder builder;
builder.AddListeningPort(address, grpc::InsecureServerCredentials());
builder.RegisterService(&service);
std::unique_ptr<Server> server(builder.BuildAndStart());
std::cout << "Server listening on port: " << address << std::endl;
server->Wait();
}
更新:使用静态(全局变量)也没有帮助,我迷路了。
解决方案
好的,找到问题了,bSetEcrMode
库中有一些特定的方法可以使一切正常。
推荐阅读
- google-api - 使用 gmail.metadata 时,如何按日期范围进行限制
- c# - 如何让脚本中的声音只播放一次?
- sql - SQL 外键没有被另一个表引用
- python - Pandas 数据透视表:TypeError:“CustomFieldOption”和“CustomFieldOption”实例之间不支持“<”
- class - 我们应该在类图中添加构造函数吗?
- javascript - 如何将较大项目中的一个打字稿文件编译为不同的文件扩展名?
- excel - VBA 查找文本并将下 50 个单元格复制到其他工作表
- c++ - 如何使用 yaml-cpp 构建节点?
- python - 如何在 f 格式中使用 string.len() 函数?
- node.js - 在节点 child_process 事件处理程序之间共享数据的“正确”方式是什么?