В моем приложении у меня есть поток, который просто запускает getline (wcin, message) постоянно, чтобы получить ввод пользователя, чтобы затем отправлять его на сервер через сокет. Я сделал обработчик сигнала, чтобы правильно закрыть программу, когда получаю Sigint. Сингнал вызывает функцию stop () , которая закрывает гнездо, а затем я пытаюсь присоединиться к своему входному потоку. У меня есть проблема с остановкой этой ветки, которую я не знаю, как решить. Код: < /p>
atomic running = true;
int sock; //socket descriptor
void stop() {
running = false;
close(sock);
}
wstring message = L"";
thread inputThread = thread([&]{
while(running) {
getline(wcin, message, L'\n');
if (message.size() > 0) {
send(sock, reinterpret_cast(message.data()), (message.size()+1) * sizeof(wchar_t), 0);
}
}
});
< /code>
Проблема в том, что Getline блокирует поток, даже когда запуск является ложным, предотвращая правильное соединение потока. Функция отправки не блокирует его, потому что к тому времени розетка уже закрыта. Как закрыть этот поток, или как я могу прервать getline?>
Подробнее здесь: https://stackoverflow.com/questions/797 ... d-stopping