我正在创建一个实现进程间通信的应用程序。为此,我设置了一个共享缓冲区,它似乎工作正常。现在,我需要一种方法让数据生成应用程序(用 c++ 编写)告诉数据接收应用程序(用 freepascal/lazarus 编写)何时应该读取数据。
我试图为此目的使用互斥锁。我对windows api编程没有太多经验。
所以,我的问题是,在下面的 FreePascal 代码中,互斥锁不会等待。我可以调用 TMutex.Wait() 函数,它不会返回错误或任何东西,但它根本不会等待。
构造函数 TMutex.Create(sName: AnsiString);
开始
sName := 'Local\Mutex'+sName;
hMutex := CreateMutexA(
nil, // 默认访问
True, // 最初不拥有
PChar(sName)); //
如果 hMutex = 0 则命名为互斥体 然后
开始
raise Exception.Create('互斥体创建失败');
结尾;
结尾;
析构函数 TMutex.Destroy;
开始
关闭句柄(hMutex);
结尾;
程序 TMutex.Wait;
开始
if (WaitForSingleObject(hMutex, INFINITE) <> 0) then ShowMessage('debug: wait returned something');
结尾;
程序 TMutex.Post;
开始
ReleaseMutex(hMutex);
结尾;