Как остановить поток, заблокированную на std :: getline ()?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как остановить поток, заблокированную на std :: getline ()?

Сообщение Anonymous »

В моем приложении у меня есть поток, который просто запускает 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»