首页 > 解决方案 > C++ grpc 的一些变量问题

问题描述

我有 grpc 服务,它包装了一些第三个库函数。被调用库的类是T_Upt. 什么时候_upt->GetState被调用Status TerminalService::GetStatestate的。如果我将调用移至构造函数_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();
}

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

标签: c++variablesconstructorgrpc

解决方案


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


推荐阅读