У меня есть код ниже, который использует uWebSockets в качестве библиотеки для моего бэкэнда. Теперь я хочу правильно завершить работу, это приводит к утечке памяти (для проверки используйте valgrind ).
#include <App.h>
#include <thread>
#include <chrono>
int main()
{
using namespace std::chrono_literals;
us_listen_socket *token{};
auto start_server = [&token] {
uWS::App()
.listen(9001, [&token](auto *listenSocket) {
if (listenSocket) token = listenSocket;
})
.run();
};
auto start_timer = [&token] {
std::this_thread::sleep_for(2s);
us_listen_socket_close(token);
};
...
}
...
выглядит следующим образом:
Версия с утечкой:
std::thread(start_server).detach();
start_timer();
Бесплатная версия:
std::thread(start_timer).detach();
start_server();
Я знаю, что программа протекает, только когда я перемещаю код для запуска сервера в отдельный поток, но я не могу понять причину этого.