Ich arbeite an einem Projekt, bei dem zwei Prozesse erstellt werden und ich möchte den IPC zwischen ihnen regeln.
Die Prozesse werden mit der Option createProces
Funktion, und ich möchte eine Mutex verwenden, um einige IPC zu tun.
Unter Linux mache ich das mit Semaphoren, aber ich habe gelesen, dass ich für IPC unter Windows eine Mutex verwenden muss.
Unter Windows kann ich es nicht zum Laufen bringen. Zuerst erstelle ich die Laufflächen wie folgt:
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);
Die Prozesse werden normal gestartet, aber wenn ich die releaseMutex
von einem Prozess aufruft, wird er nicht in diesem Prozess warten müssen. Hier ist Prozess eins:
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;
}
In Prozess zwei öffne ich die Mutex mit open mutex und kommentiere die releaseMutex
(so dass es hier zu Testzwecken hängen bleibt, aber weiterläuft):
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;
}
Kann mir jemand sagen, was ich falsch mache?