Ho aggiunto lo switch e alcune istruzioni, all'interno dello switch ancora non sono tutte.
Per decidere chi inizia ho pensato di generare un numero casuale tra 1 e 2, confrontarlo con instanza e inizierā chi otterrā TRUE dal confronto, č giusta l'istruzione primo = 1 + (rand()%2) per generare il numero casuale?
Codice:
int main(int argc, char*argv[]) {
HANDLE hOut;
int i = 0, j = 0, primo;
int istanza = 0;
long dummy;
HANDLE mapping, sem;
STARTUPINFO si;
PROCESS_INFORMATION pi;
//Inizializzazione della griglia di gioco
for(i=1; i<11; i++)
for(j=1; j<11; j++)
cArray[i][j] = ' ';
memset(&si, 0, sizeof(si));
memset(&pi, 0, sizeof(pi));
si.cb = sizeof(si);
mapping = CreateFileMapping(INVALID_HANDLE_VALUE,
NULL,PAGE_READWRITE,
0,
0,
"shared_mem");
if(mapping == INVALID_HANDLE_VALUE) //se č vera, questa č la prima istanza del programma
istanza = 1;
else istanza = 2;
switch(istanza)
{
case 1:
//Creazione memoria condivisa
mapping = CreateFileMapping(INVALID_HANDLE_VALUE,
NULL,
PAGE_READWRITE,
0,
0,
"shared_mem");
if(mapping == INVALID_HANDLE_VALUE)
Errore_("Errore nella creazione della memoria condivisa");
//Creazione semaforo
sem = CreateSemaphore(NULL,0,1,"semaforo");
if(sem == INVALID_HANDLE_VALUE)
Errore_("Errore nella creazione del semaforo");
sem = OpenSemaphore(SEMAPHORE_ALL_ACCESS,FALSE,"semaforo");
if(sem == INVALID_HANDLE_VALUE)
Errore_("Errore nell'apertura del semaforo");
WaitForSingleObject(sem,INFINITE);//attende il rilascio del semaforo da parte della
//seconda istanza per sapere quando č attiva
ReleaseSemaphore(sem,1,&dummy);//ora sa che la seconda istanza č attiva
primo = 1 + (rand()%2); //genera un numero casuale per decidere chi inizia
break;
case 2:
sem = OpenSemaphore(SEMAPHORE_ALL_ACCESS, FALSE, "semaforo");
if(sem == INVALID_HANDLE_VALUE)
Errore_("Errore nell'apertura del semaforo");
ReleaseSemaphore(sem,1,&dummy);//consente l'accesso al semaforo da parte
//della prima istanza in modo che sappia
//che la seconda č attiva
break;
}
hOut = GetStdHandle(STD_OUTPUT_HANDLE);
posizione.X = 0;
posizione.Y = 24;
SetConsoleCursorPosition(hOut,posizione);
}