Вот фрагмент: prog1:
HANDLE hM;
hM = CreateMutexA(NULL,TRUE, "abc"); // I have to use TRUE otherwise WaitForSingleObject fails.. by design it wants to take ownership and w//o TRUE there is no owner anyway right? <<-- **check this please if its true**
...
prog2:
HANDLE hM;
hM = OpenMutexA(MUTEX_ALL_ACCESS,NULL, "abc");
while(WaitForSingleObject(hM,INFINITE)) {
// do smthing
ReleaseMutex(hM);
hM = OpenMutexA(MUTEX_ALL_ACCESS,NULL, "abc"); // In order to continue while loop but it doesnt rewind,
}
Проблема> Это не сделает полубесконечный цикл ... он входит один раз и вот так.
Цель?Чтобы отслеживать активность какого-либо процесса (если он аварийно завершается, я перезапускаю его), бесконечные циклы сильно бьют по моему процессору, и я не могу использовать Sleep, мне нужно перезапустить его asasp (хорошо, если какое-то умное решение возможно с помощью while (1) или for (;;) пожалуйста, напишите)
ОБНОВЛЕНИЕ
должно быть в то время как (WaitForSingleObject (hM, INFINITE) == WAIT_ABANDONED) {...}, я неправильно скопировал:).
Он работает один раз, а потом не будет ждать, есть ли способ сбросить дескриптор?
prog1:
HANDLE hM;
hM = CreateMutexA(NULL,TRUE, "abc");
prog2:
HANDLE hM;
hM = OpenMutexA(MUTEX_ALL_ACCESS,NULL, "abc");
while(WaitForSingleObject(hM,INFINITE)) {
ReleaseMutex(hM);
Sleep(1000);
CloseHandle(hM)
// do smthing like CreateProcess()
Sleep(1000);
hM = OpenMutexA(MUTEX_ALL_ACCESS,NULL, "abc");
}
Таким образом, это работает, если кто-то хочет добавить комментарий к этому сообщению.