C++ 使用解构器函数停止Thrift TSimpleserver

C++ 使用解构器函数停止Thrift TSimpleserver,c++,boost,mfc,thrift,C++,Boost,Mfc,Thrift,我有一个单独的类来处理我的Thrift TSimpleServer。因为服务函数阻塞了,所以我在一个独立于主函数的线程中调用它。现在我的主要问题是,即使我可以让服务器运行,我也找不到一种方法来优雅地退出它。我尝试在解构中调用stop,但它不起作用,我必须假设这是因为我必须在解构中重新声明一个新的TSImpleServer对象,以便访问stop。我一辈子都找不到全局或至少在头文件中声明和初始化TSimpleServer实例的方法。所以,希望有人能帮助我停止这台服务器的退出优雅 代码: 标题 typ

我有一个单独的类来处理我的Thrift TSimpleServer。因为服务函数阻塞了,所以我在一个独立于主函数的线程中调用它。现在我的主要问题是,即使我可以让服务器运行,我也找不到一种方法来优雅地退出它。我尝试在解构中调用stop,但它不起作用,我必须假设这是因为我必须在解构中重新声明一个新的TSImpleServer对象,以便访问stop。我一辈子都找不到全局或至少在头文件中声明和初始化TSimpleServer实例的方法。所以,希望有人能帮助我停止这台服务器的退出优雅

代码:

标题

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();
}