1

我有一个单独的课程来处理我的 Thrift TSimpleServer。由于serve()功能块我在与我的主要功能不同的线程中调用它。现在我的主要问题是即使我可以让服务器运行,我也找不到优雅地退出它的方法。我尝试stop()在解构中调用 ,但它不起作用,我不得不假设这是因为我必须TSImpleServer在解构中重新声明一个新对象,这样我才能访问stop(). 我一辈子都找不到一种方法来全局或至少在头文件中声明和初始化TSimpleServer. 所以希望有人可以帮助我stop()优雅地退出这个服务器。

代码:

标题

typedef boost::thread m_thread;

class ServerThread
{
public:

    m_thread thread_t;

    ServerThread();
    ~ServerThread(void);
    void Run();
};

cpp

boost::shared_ptr<TProtocolFactory> protocol_t(new TBinaryProtocolFactory());
boost::shared_ptr <ServerHandler> handler(new ServerHandler());
boost::shared_ptr<TProcessor> processor_t(new ServerProcessor(handler));
boost::shared_ptr<TServerTransport> server_transport_t(new TServerSocket(9090));
boost::shared_ptr<TTransportFactory> transport_factory_t(new TBufferedTransportFactory());

ServerThread::ServerThread()
{
    thread_t = boost::thread(&ServerThread::Run,this);
}

ServerThread::~ServerThread(void)
{
    TSimpleServer server(processor_t, 
                         server_transport_t, 
                         transport_factory_t, 
                         protocol_t);

    server.stop();

    thread_t.join();
}

void ServerThread::Run()
{
    TSimpleServer server(processor_t, 
                         server_transport_t, 
                         transport_factory_t, 
                         protocol_t);

    server.serve();
}
4

0 回答 0