C ++ CIN входной резьбы остановкаC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 C ++ CIN входной резьбы остановка

Сообщение Anonymous »

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

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

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

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

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

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