2011-04-16 54 views
0

我从一个线程开始TNonblockingServer:如何停止在C++节俭TNonblockingServer?

void *start_server(void *) { 
    server->serve(); 
    return NULL; 
} 

pthread_create(&daemon_thread, NULL, start_server, NULL); 

,并调用从主线程server->stop(),然后尝试使用pthread_join等待后台线程退出正常。但主线程挂在pthread_join呼叫。

如何优雅地关闭节俭服务器?

+0

这是一种预期,主线程“挂起“,而等待另一个线程终止。它是否正确地做到了,作为停止命令的回应? – 2011-04-16 07:41:51

+0

我期望的是,当我从主线程调用server-> stop()时,后台线程中的server-> serve()将完成,以便此线程可以退出。因此,在主线程中使用pthread_join来等待这个后台线程“start_server()”退出..但是“pthread_join()”会永远挂起* – eddyxu 2011-04-16 09:34:18

回答

1

对不起,反应迟缓

你只需要停止底层的libevent

例如,稍微延迟停止:

tv.tv_usec = 500000; 
tv.tv_sec = 0; 
event_base_loopexit(myTNonBlockSvr->getEventBase(), &tv); 
0

AFAICT TNonblockingServer::stop()is not implemented。虽然TNonblockingServer析构函数确实尝试了干净关闭,所以您可能能够删除服务器并关闭服务器。

虽然这是一个完整的黑客,理想情况下stop()将正确实施。