Visualizza messaggio singolo
Vecchio 27-07-2004, 20.45.15   #301
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
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.
LoryOne non è collegato   Rispondi citando