Как удалить все символы из stdin после получения доступа к серверу?

100
09 декабря 2020, 01:50

Существует сервер, в котором запускается n-ое количество процессов. Синхронизация происходит с помощью мьютекса. Клиенты обрабатываются последовательно по одному.

Сервер запускает какое-то количество процессов (.exe). На первом шаге сервер принимает сообщения от клиента, который "схавал" мьютекс, а другие клиенты ожидают освобождения мьютекса. Клиент, который ждет мьютекс не может отправлять сообщения серверу.

Представим сценарий:

Я пытаюсь ввести какие-то данные в клиента, который в данный момент не обрабатывается сервером. Эти данные естественно никак не отправляются серверу и якобы не вводятся, на самом деле эти данные помещаются во входной потом, но они на этом этапе никак не визуализируются в консоле.

С какой проблемой я столкнулся:

После того, как клиент, который не имел доступа к серверу, наконец, его получает он автоматически отправляет все символы, введенные до этого серверу, по одному.

Ниже код клиента, демонстрирующий текущий (некорректный функционал):

HANDLE hMutex = CreateMutex(0, FALSE, L"DemoMutex");
    char ch  = ' ';
    WaitForSingleObject(hMutex, INFINITE);
    while (ch != 'E') {
        cin >> ch;
    }
    ReleaseMutex(hMutex);
    CloseHandle(hMutex);

Я пытался придумать костыль, по типу, считать все из cin с помощью getline, но данный метод считывает все данные до переноса строки, то есть, если я не ввожу '\n' клиент все равно отправляет все символы по одному серверу.

В итоге я хочу избавиться от символов, которые, как бы, были введены заранее, до того как клиент получил доступ к серверу.

READ ALSO
Объясните, пожалуйста, часть кода на С++ (Qt)

Объясните, пожалуйста, часть кода на С++ (Qt)

Пытался разобраться как добавить чекбоксы на представлениеНашел один вариант: ссылка Так приведен такой вариант решения

116
Как удалить все виджеты со слоя (компоновщика) Qt

Как удалить все виджеты со слоя (компоновщика) Qt

У меня есть слой, который заполняется виджетами

97
в QInputDialog выводит запятую вместо точки для getDouble

в QInputDialog выводит запятую вместо точки для getDouble

Подскажите пожалуйста - использую для ввода десятичного числа, почему-то по умолчанию выводит вместо точки запятую, хотя в обучалках показывает...

107
Перестал работать QWebSocket

Перестал работать QWebSocket

Клиент на qt перестал подключаться к вебсокету, хотя сервер работает исправноК серверу подключен cloudflare, подключение осуществляется через...

98