Под Windows 7 у меня есть приложение Python 3, которое связывается по именованному каналу с исполняемым файлом, написанным на C с использованием Visual Studio. В Python я использую пакет win32pipe.
Я наблюдаю, что в исполняемом чтении из канала блокируется:
readResult = ReadFile(plafParams->hrpipe_p, &byte, 1, &dwBytesTransferred, &overlap);
Труба открывается с помощью:
...
...
overlap.hEvent = NULL;
overlap.Offset = 0;
overlap.OffsetHigh = 0;
overlap.Pointer = NULL;
...
...
plafParams->hwpipe_p = CreateFile(pipeName, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, &overlap);
overlap
является статической глобальной переменной и инициализируется, как указано выше.
OVERLAPPED overlap;
В Python канал открывается как:
self._rpipe = win32pipe.CreateNamedPipe(r'\\.\pipe\wskr_%s'%(self._comport,), win32pipe.PIPE_ACCESS_DUPLEX | win32file.FILE_FLAG_OVERLAPPED , 0, 1, 256, 256, 0, None)
После ожидания подключения к трубе я пишу в него как
win32file.WriteFile(self._rpipe, bytes)
Это работает, и я получаю отправленные байты в исполняемом файле без проблем, но я хотел бы получить неблокирующее чтение. Поэтому я открыл трубу с win32file.FILE_FLAG_OVERLAPPED
, но это не помогает ...
Буду признателен за любую подсказку; -)