我有一个单独的课程来处理我的 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();
}