Вы упоминаете, что не хотите использовать именованный канал для внутреннего использования; Вероятно, стоит отметить, что в документации для CreatePipe () говорится, "Анонимные каналы реализованы с использованием именованного канала с уникальным именем. Поэтому вы часто можете передать дескриптор анонимному каналу в функция, которая требует дескриптор для именованного канала. " Итак, я предлагаю вам просто написать функцию, которая создает аналогичный канал с правильными настройками для асинхронного чтения. Я склонен использовать GUID в качестве строки (генерируемой с использованием CoCreateGUID()
и StringFromIID()
), чтобы дать мне уникальное имя, а затем создать серверный и клиентский концы именованного канала с правильными настройками для перекрывающегося ввода-вывода (более подробно на это и код, здесь: http://www.lenholgate.com/blog/2008/02/process-management-using-jobs-on-windows.html).
Как только у меня есть, я подключаю некоторый код, который мне нужно для чтения файла, используя перекрывающийся ввод-вывод с портом завершения ввода-вывода, и, ну, тогда я просто получаю асинхронные уведомления о данных по мере их поступления ... Тем не менее, у меня есть достаточное количество хорошо протестированного библиотечного кода, который делает все это возможным ...
Возможно, возможно установить именованный канал, а затем просто выполнить перекрывающееся чтение с событием в вашей структуре OVERLAPPED
и проверить событие, чтобы увидеть, доступны ли данные ... У меня нет кода, который хотя делает это.