Я создаю приложение, реализующее межпроцессное взаимодействие. Для этой цели я установил общий буфер, который, кажется, работает нормально. Теперь мне нужен способ для приложения, генерирующего данные (написанного на C ++), чтобы сообщить приложению, принимающему данные (написанному на freepascal / lazarus), когда оно должно читать данные.
Я пытался использовать для этой цели мьютекс. У меня нет большого опыта программирования Windows api.
Итак, моя проблема в том, что в приведенном ниже коде FreePascal мьютекс не будет ждать. Я могу вызвать функцию TMutex.Wait (), она не возвращает ошибку или что-то еще, но просто не ждет.
конструктор TMutex.Create (sName: AnsiString);
begin
sName: = 'Local \ Mutex' + sName;
hMutex: = CreateMutexA (
nil, // доступ по умолчанию
True, // изначально не принадлежал
PChar (sName)); // именованный мьютекс
если hMutex = 0, то
начало
поднять исключение.Create ('Ошибка создания мьютекса');
end;
end;
деструктор TMutex. Destroy;
begin
CloseHandle (hMutex);
end;
процедура TMutex.Wait;
begin
if (WaitForSingleObject (hMutex, INFINITE) ‹> 0) then ShowMessage ('отладка: ожидание что-то вернуло');
конец;
процедура TMutex.Post;
начало
ReleaseMutex (hMutex);
конец;