Cominciamo dall'inizio:
sem[0] = OpenSemaphore(SEMAPHORE_ALL_ACCESS,FALSE,"semaforo ");
sem[1] = OpenSemaphore(SEMAPHORE_ALL_ACCESS,FALSE,"semaforo 1");
Ok, deve controllare che vi siano 2 semafori di nome semaforo e semaforo1
Codice:
if(sem[0] != NULL && sem[1] != NULL)
{
printf("Sono ammesse solo 2 istanze del programma!\n");
Sleep(1000);
return 0;
}
Perchè mi scriva che sono ammesse solo 2 istanze, devono essere presenti entrambi i semafori ed entrambi !=NULL
if(sem[0] == NULL) //se è vera, questa è la prima istanza
sem[0] equivale a semaforo
siamo nella prima istanza...
Codice:
sem[0] = CreateSemaphore(NULL,0,1,"semaforo");
if(sem[0] == INVALID_HANDLE_VALUE)
Errore_("Errore nella creazione del semaforo 1");
poi...
Codice:
sem[1] = CreateSemaphore(NULL,0,1,"semaforo2");
if(sem[1] == INVALID_HANDLE_VALUE)
Errore_("Errore nella creazione del semaforo 2");
Aspetta un po...creo semaforo2 ?
Leggo bene ? semaforo2 ?
e dov'è che controlla che esista semaforo2 ?
e poi...
Perchè creo sem[1] nella prima istanza ?
sem[1] va creata nella seconda, altrimenti col cacchio che la ennesima mi verifica questo:
Codice:
if(sem[0] != NULL && sem[1] != NULL)
{
printf("Sono ammesse solo 2 istanze del programma!\n");
Sleep(1000);
return 0;
}
sem[0] e sem[1] non sono entrambi !=NULL.
La soluzione è in allegato.