Это похоже на синхронный код. При асинхронном (OVERLAPPED) вводе/выводе вы не можете использовать буфер до завершения операции. Установите член hEvent
структуры OVERLAPPED
и измените свой главный цикл с PeekMessage
на MsgWaitForMultipleObjects
, чтобы ваша программа могла реагировать на события ввода/вывода. Затем вы можете ждать как хэндл операции OVERLAPPED
, так и хэндл процесса, чтобы знать, когда другая программа вышла.
Возможно, вы захотите изучить файлы с отображением в память, вы можете создать что-то в памяти, которое представляет собой очередь, и писать из одного места, а читать из другого. В одном из моих проектов у меня была круговая очередь, в которой один процесс записывал в очередь, а другой читал всякий раз, когда у меня было время.
Вы создаете файл с отображением памяти следующим образом:
SECURITY_ATTRIBUTES sa;
sa.bInheritHandle = TRUE;
sa.nLength = sizeof( sa );
sa.lpSecurityDescriptor = NULL;
hdFile = CreateFileMapping(INVALID_HANDLE_VALUE,&sa,
PAGE_READWRITE,0,dwBufSize, L"SomeName");
Затем вы получаете указатель на разделяемую память, как этот
pOutSharedMemory=MapViewOfFile(hdFile,FILE_MAP_ALL_ACCESS,0,0,dwBufSize);
, теперь вы можете отображать указатели на память
, например. пара счетчиков, чтобы отслеживать, где вы находитесь в памяти (в пределах dwBufSize)
pdwReadOffset = reinterpret_cast<DWORD*>(pOutSharedMemory)
pdwWriteOffset = pdwReadOffset + sizeof(DWORD)
, тогда есть некоторая структура, которую вы затем читаете / записываете в память с помощью memmove
, вам нужно будет позаботиться о синхронизации на месте, используя критические разделы и т. д.