Мне нужен сетевой поток клиента, чтобы иметь возможность отвечать как на новые сообщения, которые должны быть переданы, так и на получение новых данных в сети. Я хочу, чтобы этот поток не выполнял цикл опроса, а обрабатывал его только по мере необходимости.
Сценарий выглядит следующим образом:
Клиентское приложение должно взаимодействовать с сервером по протоколу, который в значительной степени, но не полностью, является синхронным. Как правило, клиент отправляет сообщение на сервер и блокирует до получения ответа.
Сервер может обрабатывать клиентские запросы асинхронно, и в этом случае ответ клиенту
это не результат, а уведомление о том, что обработка началась. Сообщение о результате отправляется клиенту в какой-то момент в будущем, когда сервер завершит обработку клиентского запроса.
Асинхронные уведомления о результатах могут поступать к клиенту в любое время. Эти уведомления необходимо обрабатывать, когда они получены, т. Е. Невозможно обработать невыполненное задание только после повторной передачи клиентом.
Клиентский сетевой поток получает и обрабатывает уведомления от сервера, а также передает исходящие сообщения от клиента.
Чтобы добиться этого, мне нужно активировать поток для выполнения обработки либо при получении сетевых данных, либо при передаче сообщения для передачи в очередь ввода.
Как поток может пробудиться, чтобы выполнить обработку поставленного в очередь рабочего элемента ИЛИ данных из сокета?
Меня интересует, прежде всего, использование простых Win32 API.
Хотелось бы получить минимальный пример или соответствующий урок!