【发布时间】:2010-12-07 11:40:30
【问题描述】:
我正在创建一个实现进程间通信的应用程序。 为此,我设置了一个共享缓冲区,它似乎工作正常。 现在,我需要一种数据生成应用程序的方法(用 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('mutex 创建失败');
结束;
结束;
析构函数 TMutex.Destroy;
开始
关闭句柄(hMutex);
结束;
程序 TMutex.Wait;
开始
if (WaitForSingleObject(hMutex, INFINITE) 0) then ShowMessage('debug: wait returned something');
结束;
程序 TMutex.Post;
开始
ReleaseMutex(hMutex);
结尾;
【问题讨论】:
-
命名管道是为此目的而发明的:IPC - 通过共享内存 - 使用方便的基于 ReadFile/WriteFile 的 API
标签: winapi ipc mutex fpc waitforsingleobject