【问题标题】:C++ some variable issue with grpcC ++ grpc的一些变量问题
【发布时间】:2020-01-05 06:10:36
【问题描述】:

我有 grpc 服务,它包装了一些第三个库函数。被调用库的类是T_Upt。当从Status TerminalService::GetState 调用_upt->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::moveT_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();
}

更新:使用静态(全局变量)也没有帮助,我迷路了。

【问题讨论】:

    标签: c++ variables constructor grpc


    【解决方案1】:

    好的,找到问题了,库中有一些特定的方法bSetEcrMode 可以使一切正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-21
      • 2013-11-04
      • 1970-01-01
      • 1970-01-01
      • 2011-08-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多