C++ 使用解构器函数停止Thrift TSimpleserver
我有一个单独的类来处理我的Thrift TSimpleServer。因为服务函数阻塞了,所以我在一个独立于主函数的线程中调用它。现在我的主要问题是,即使我可以让服务器运行,我也找不到一种方法来优雅地退出它。我尝试在解构中调用stop,但它不起作用,我必须假设这是因为我必须在解构中重新声明一个新的TSImpleServer对象,以便访问stop。我一辈子都找不到全局或至少在头文件中声明和初始化TSimpleServer实例的方法。所以,希望有人能帮助我停止这台服务器的退出优雅 代码: 标题C++ 使用解构器函数停止Thrift TSimpleserver,c++,boost,mfc,thrift,C++,Boost,Mfc,Thrift,我有一个单独的类来处理我的Thrift TSimpleServer。因为服务函数阻塞了,所以我在一个独立于主函数的线程中调用它。现在我的主要问题是,即使我可以让服务器运行,我也找不到一种方法来优雅地退出它。我尝试在解构中调用stop,但它不起作用,我必须假设这是因为我必须在解构中重新声明一个新的TSImpleServer对象,以便访问stop。我一辈子都找不到全局或至少在头文件中声明和初始化TSimpleServer实例的方法。所以,希望有人能帮助我停止这台服务器的退出优雅 代码: 标题 typ
typedef boost::thread m_thread;
class ServerThread
{
public:
m_thread thread_t;
ServerThread();
~ServerThread(void);
void Run();
};
cpp
为什么要在~ServerThread中重新实例化TSimpleServer对象?因为我不知道如何访问stop函数。当我尝试在~ServerThread中使用server.stop时,我会遇到一个错误,因此唯一不出现错误的方法是实例化它,这显然没有帮助,但我不知道其他方法。也许将服务器保留为ServerThread的成员?我尝试过,但似乎不起作用,引发另一个错误,因为当服务器声明为TSimpleServer时,后面必须跟处理器、服务器传输等
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();
}