Следующий код прекрасно работает на моем компьютере с XP SP2, но при запуске на моем компьютере с Vista, вызов WaitForSingleObject бесконечно ждет:
HANDLE ghSemaphore;
ghSemaphore = CreateSemaphore(NULL, 0, 1, "COM_PHILOERTEL_FINA");
if (ghSemaphore == NULL) {
MessageBoxA(NULL,"Error creating semaphore","ERROR",0);
return FALSE;
}
MessageBoxA(NULL,"Semaphore created. Waiting for it to be triggered","ERROR",0);
WaitForSingleObject(ghSemaphore, INFINITE);
// got the semaphore, ready to rock
MessageBoxA(NULL,"Got the semaphore, ready to rock!","Notice",0);
Вот нить, которая выпускает семафор:
ghSemaphore = OpenSemaphore(SEMAPHORE_ALL_ACCESS, FALSE, "COM_PHILOERTEL_FINA");
if (ghSemaphore == NULL) {
MessageBoxA(NULL,"Failed to open semaphore","ERROR",0);
return FALSE;
}
if (0 == ReleaseSemaphore(ghSemaphore, 1, NULL)) {
MessageBoxA(NULL,"Plugin was unable to release the semaphore","ERROR",0);
return FALSE;
}
Названный семафор был недавним дополнением, которое не принесло пользы. До этого потоки просто делились ghSemaphore с его анонимным семафором. Нет видимой разницы. Кто-нибудь знает, почему этот двоичный файл (скомпилированный на компьютере с XP в VC6, Express Edition fwiw) не будет работать в Vista? Как я уже говорил выше, вызов WaitForSingleObject - это то, что никогда не завершается.
спасибо!