我正在开发一个创建两个流程的项目,我想在它们之间规范IPC。
使用createProces
函数创建进程,我想使用互斥进行一些IPC。
在Linux中我用信号量做这个,但是我已经读过,对于Windows中的IPC,我必须使用互斥锁。
在Windows中我似乎无法让它工作。首先,我创建这样的踏板:
CreateProcess(IpApplicationName, NULL, NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &StartInfo, &ProcessInfo);
CreateProcess(IpApplicationName, NULL, NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &StartInfo2, &ProcessInfo2);
进程启动正常,但是当我从一个进程中删除releaseMutex
调用时,它将不会在该进程中等待。这是第一步:
volatile HANDLE hMutex; // Global hMutex Object
int main()
{
hMutex=CreateMutex(NULL,FALSE,NULL);
while(1)
{
WaitForSingleObject(hMutex,INFINITE);
printf("Thread writing to database...\n");
Sleep(2000);
ReleaseMutex(hMutex);
}
return 0;
}
在第二个过程中,我打开互斥锁并打开互斥锁,然后对releaseMutex
进行评论(这样它就会卡在这里,进行测试。但是它会继续运行):
int main()
{
while(1)
{
HANDLE hMutex;
hMutex=OpenMutex(MUTEX_ALL_ACCESS,FALSE,MUTEXNAME);
WaitForSingleObject(hMutex,INFINITE);
printf("Thread writing to database22...\n");
Sleep(2000);
//ReleaseMutex(hMutex);
}
return 0;
}
谁能告诉我我做错了什么?
答案 0 :(得分:4)
如果您正在检查这些Win32 API调用的错误,那将是显而易见的。 OpenMutex
调用必须失败,因为编写了此代码,因为还没有其他人创建具有该名称的互斥锁。
OpenMutex功能允许多个进程打开句柄 相同的互斥对象。 只有某个进程具有该功能才能成功 已经使用CreateMutex函数创建了互斥锁。
每个Win32 API都可能失败 - 您需要检查并正确处理这些错误。
答案 1 :(得分:1)
您使用CreateMutex创建匿名互斥锁,然后尝试按名称
找到它答案 2 :(得分:0)
您必须在CreateMutex和OpenMutex中提及UNIQUE
互斥锁名称。