|
| HOMEPAGE | INDICE FORUM | REGOLAMENTO | ::. | NEI PREFERITI | .:: | RSS Forum | RSS News | NEWS web | NEWS software | |
| PUBBLICITA' | | | ARTICOLI | WIN XP | VISTA | WIN 7 | REGISTRI | SOFTWARE | MANUALI | RECENSIONI | LINUX | HUMOR | HARDWARE | DOWNLOAD | | | CERCA nel FORUM » | |
19-07-2004, 09.10.35 | #211 |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
|
|
19-07-2004, 09.43.51 | #212 |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
|
Premessa
Ho creato la memoria condivisa in questo modo nel main: mapping = CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_R EADWRITE,0,0,"shared_mem"); e la attacco in controlla() così: p = (t_Mossa *)MapViewOfFile(mapping, FILE_MAP_WRITE, 0, 0, 0); p è dichiarato t_Mossa *p; e l'HANDLE mapping è passato a controlla() come parametro. Domanda E' corretto leggere il contenuto della memoria condivisa in questa maniera? colonna_c = p->colonna; riga = p->riga; |
19-07-2004, 10.01.41 | #213 |
Gold Member
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
|
A me sembra corretto...
Il problema della "scrivi()" potrebbe essere che in essa hai aggiunto una chiamata ad AggiornaCampo con diversi parametri?... Bisognerebbe vedere il codice fin'ora prodotto.... Bye |
19-07-2004, 10.14.56 | #214 |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
|
Il codice di "Scrivi()" è postato nella pagina precedente, comunque l'errore lo da anche se metto tutta la funzione come commento facendola precedere da /* e seguire da */, in pratica anche togliendola il problema rimane... può essere colpa del compilatore?
|
19-07-2004, 10.16.12 | #215 |
Gold Member
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
|
Si, ho visto scrivi .. ed appunto per questo suggerivo che sarebbe utile vedere tutto il codice fin'roa prodotto...
Bye |
19-07-2004, 10.27.48 | #216 |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
|
Ecco il codice, ho segnato il punto che genera l'errore, è in fondo.
|
19-07-2004, 10.32.38 | #217 |
Gold Member
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
|
Ma ovviamente scusa .. la AggiornaCampo vuole un parametro che tu non gli dai nella chiamata:
Codice:
void AggiornaCampo(char bArray[10][10]) Codice:
AggiornaCampo(); Codice:
void AggiornaCampo(void) Bye P.S.: Mancano i prototipi, in C i prototipi sono obbligatori. |
19-07-2004, 10.34.49 | #218 |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
|
Perché però se non tocco Scrivi() non ho errori e il programma funziona?
|
19-07-2004, 10.36.43 | #219 |
Gold Member
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
|
Perché evidentemente non viene ricompilato l'oggetto del sorgente C, ma viene solo linkato.
Bye |
19-07-2004, 10.43.03 | #220 |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
|
Ok, comunque mi hai convinto che posso anche toglierlo il parametro in AggiornaCampo.
|
19-07-2004, 10.45.46 | #221 | |
Gold Member
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
|
Quota:
Un consiglio: creati un header coi prototipi, oppure metti i prototipi all'inizio del file appena sotto i #define... Bye |
|
19-07-2004, 10.56.55 | #222 | |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
|
Quota:
|
|
19-07-2004, 11.00.13 | #223 | |
Gold Member
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
|
Quota:
Bye |
|
19-07-2004, 13.29.32 | #224 |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
|
Quando parte, la prima istanza, dovrà creare la memoria condivisa, il semaforo (fin qui ok) e restare in attesa finché non parte la seconda per poi decidere a chi toccherà cominciare e comunicarglielo.
Come posso far capire alla prima istanza che la seconda è partita? Io avrei pensato ad una cosa del genere: - P1 parte, crea la memoria condivisa e il semaforo con 0 token liberi - P1 lancia una WaitForSingleObject(sem, INFINITE) per attendere che il semaforo si liberi - P2 parte, sa che esistono sia la memoria condivisa che il semaforo - P2 rilascia un token su sem (si può fare se prima non lo occupa?) - P1 accede al semaforo e quindi sa che P2 è partito E' una soluzione valida? Ultima modifica di Alhazred : 19-07-2004 alle ore 15.17.52 |
19-07-2004, 16.01.42 | #225 |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
|
Per ora questo è il main
Codice:
int main(int argc, char*argv[]) { HANDLE hOut; int i = 0, j = 0, istanza; 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; //qualcosa tipo il case of { //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"); WaitForSingleObject(sem,INFINITE); sem = OpenSemaphore(SEMAPHORE_ALL_ACCESS, FALSE, "semaforo"); if(sem == INVALID_HANDLE_VALUE)Errore_("Errore nell'apertura del semaforo"); hOut = GetStdHandle(STD_OUTPUT_HANDLE); posizione.X = 0; posizione.Y = 24; SetConsoleCursorPosition(hOut,posizione); } |
Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti) | |
Strumenti discussione | |
|
|
Discussioni simili | ||||
Discussione | Autore discussione | Forum | Risposte | Ultimo messaggio |
La grande battaglia dei super eroi! | Sbavi | Chiacchiere in libertà | 83 | 27-02-2009 10.43.39 |
battaglia navale in c# | Joy&Lu | Programmazione | 3 | 01-09-2008 15.08.58 |
Il Signore degli Anelli - La Battaglia per la terra di mezzo | Darth Maul | Masterizzazione Giochi Games | 0 | 01-09-2006 18.16.18 |
[C] Battaglia Navale (versione client server) in Linux | Nanri | Programmazione | 11 | 06-08-2005 14.50.27 |