Я ищу способ ввода данных в терминал при одновременном получении данных из сети.
Для этого я создал новый поток dataCapture
(std::thread
)который получит данные, используя std::cin
.Основным потоком является получатель.
Программа должна завершиться, когда сеть отправляет строку «конец».
Вот упрощенный код:
void dataCapture()
while (! quit) {
std::string data;
std::cout << "Enter data: ";
std::cin >> data;
}
}
bool quit=false;
int main() {
// socket creation
// connection to server
const std::string quit_value = "end";
std::thread datacapture_T(dataCapture);
while (! quit) {
char recep[1024];
recv(sd, recep, sizeof(recep),0);
if (recep == quit_value) {
quit=true;
}
}
datacapture_T.join();
return 0;
}
Тоне работает, потому что после получения "end"
, main
блоков на datacapture_T.join()
, потому что dataCapture
заблокирован в вызове std::cin
.
Можно ли разблокировать поток dataCapture
от основного?
Если нет, то можно ли принудительно убить его?
пс: Я не включил блокировки для упрощения.
Помощь приветствуется!