В моем приложении у меня есть поток, который просто запускает std :: getline () постоянно, чтобы получить ввод пользователя, чтобы затем отправлять его на сервер через сокет. Я сделал обработчик сигнала, чтобы правильно закрыть программу, когда получаю 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);
}
}
});
Проблема заключается в том, что getLine () блокирует поток, даже при запуске является ложным, предотвращая правильное соединение потока. Send () не блокирует его, потому что к тому времени розетка уже закрыта. Как закрыть этот поток, или как я могу прервать getLine () ?>
Подробнее здесь:
https://stackoverflow.com/questions/797 ... stdgetline