Существует сервер, в котором запускается 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'
клиент все равно отправляет все символы по одному серверу.
В итоге я хочу избавиться от символов, которые, как бы, были введены заранее, до того как клиент получил доступ к серверу.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Пытался разобраться как добавить чекбоксы на представлениеНашел один вариант: ссылка Так приведен такой вариант решения
У меня есть слой, который заполняется виджетами
Подскажите пожалуйста - использую для ввода десятичного числа, почему-то по умолчанию выводит вместо точки запятую, хотя в обучалках показывает...
Клиент на qt перестал подключаться к вебсокету, хотя сервер работает исправноК серверу подключен cloudflare, подключение осуществляется через...