我从一个线程启动一个TNonblockingServer:
void *start_server(void *) {
server->serve();
return NULL;
}
pthread_create(&daemon_thread, NULL, start_server, NULL);
,并从主线程调用server->stop()
,然后尝试使用pthread_join
等待后台线程正常退出。但是主线程在pthread_join
调用时挂起。
我怎样才能优雅地关闭节俭服务器?
答案 0 :(得分:1)
对于迟到的回复表示抱歉
你只需要停止潜在的libevent
例如,稍微延迟停止:
tv.tv_usec = 500000;
tv.tv_sec = 0;
event_base_loopexit(myTNonBlockSvr->getEventBase(), &tv);
答案 1 :(得分:0)
AFAICT TNonblockingServer::stop()
is not implemented。 TNonblockingServer
析构函数确实尝试干净关闭,因此可能能够删除服务器并关闭服务器。
这是一个完整的黑客攻击,理想情况下stop()
将得到正确实施。