Visualizza messaggio singolo
Vecchio 19-07-2004, 17.05.21   #228
Alhazred
Made in Japan
Top Poster
 
L'avatar di Alhazred
 
Registrato: 04-07-2001
Messaggi: 4.461
Alhazred promette bene
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);
}
Alhazred non č collegato   Rispondi citando