Как остановить экономный TNonblockingServer в C ++? - PullRequest
0 голосов
/ 16 апреля 2011

Я запускаю сервер TNonblocking из одного потока:

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

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

и вызовите server->stop() из основного потока, затем попытайтесь использовать pthread_join, чтобы дождаться грациозного завершения фонового потока. Однако основной поток зависает при вызове pthread_join.

Как я мог изящно завершить работу благотворительного сервера?

Ответы [ 2 ]

1 голос
/ 01 августа 2011

Извините за поздний ответ

Вам просто нужно остановить лежащий в основе Libvent

Например, слегка задержанный останов:

tv.tv_usec = 500000;
tv.tv_sec  = 0;
event_base_loopexit(myTNonBlockSvr->getEventBase(), &tv);
0 голосов
/ 27 апреля 2011

AFAICT TNonblockingServer::stop() не реализовано . Деструктор TNonblockingServer пытается выполнить чистое отключение, поэтому вы можете удалить сервер и отключить его.

Это полный взлом, и в идеале stop() будет правильно реализовано.

...