Telefonino.net network
 
| 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 » |

Torna indietro   WinTricks Forum > Software > Programmazione

Notices

Rispondi
 
Strumenti discussione
Vecchio 19-07-2004, 09.10.35   #211
Alhazred
Made in Japan
Top Poster
 
L'avatar di Alhazred
 
Registrato: 04-07-2001
Messaggi: 4.461
Alhazred promette bene
E' successo di nuovo
Alhazred non è collegato   Rispondi citando
Vecchio 19-07-2004, 09.43.51   #212
Alhazred
Made in Japan
Top Poster
 
L'avatar di Alhazred
 
Registrato: 04-07-2001
Messaggi: 4.461
Alhazred promette bene
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;
Alhazred non è collegato   Rispondi citando
Vecchio 19-07-2004, 10.01.41   #213
P8257 WebMaster
Gold Member
 
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
P8257 WebMaster promette bene
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
P8257 WebMaster non è collegato   Rispondi citando
Vecchio 19-07-2004, 10.14.56   #214
Alhazred
Made in Japan
Top Poster
 
L'avatar di Alhazred
 
Registrato: 04-07-2001
Messaggi: 4.461
Alhazred promette bene
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?
Alhazred non è collegato   Rispondi citando
Vecchio 19-07-2004, 10.16.12   #215
P8257 WebMaster
Gold Member
 
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
P8257 WebMaster promette bene
Si, ho visto scrivi .. ed appunto per questo suggerivo che sarebbe utile vedere tutto il codice fin'roa prodotto...

Bye
P8257 WebMaster non è collegato   Rispondi citando
Vecchio 19-07-2004, 10.27.48   #216
Alhazred
Made in Japan
Top Poster
 
L'avatar di Alhazred
 
Registrato: 04-07-2001
Messaggi: 4.461
Alhazred promette bene
Ecco il codice, ho segnato il punto che genera l'errore, è in fondo.
Alhazred non è collegato   Rispondi citando
Vecchio 19-07-2004, 10.32.38   #217
P8257 WebMaster
Gold Member
 
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
P8257 WebMaster promette bene
Ma ovviamente scusa .. la AggiornaCampo vuole un parametro che tu non gli dai nella chiamata:

Codice:
void AggiornaCampo(char bArray[10][10])
chiamata:
Codice:
AggiornaCampo();
Tra l'altro mi sembra che questo parametro non venga usato nella funzione, quindi se fai:

Codice:
void AggiornaCampo(void)
L'errore sparisce...

Bye

P.S.: Mancano i prototipi, in C i prototipi sono obbligatori.
P8257 WebMaster non è collegato   Rispondi citando
Vecchio 19-07-2004, 10.34.49   #218
Alhazred
Made in Japan
Top Poster
 
L'avatar di Alhazred
 
Registrato: 04-07-2001
Messaggi: 4.461
Alhazred promette bene
Perché però se non tocco Scrivi() non ho errori e il programma funziona?
Alhazred non è collegato   Rispondi citando
Vecchio 19-07-2004, 10.36.43   #219
P8257 WebMaster
Gold Member
 
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
P8257 WebMaster promette bene
Perché evidentemente non viene ricompilato l'oggetto del sorgente C, ma viene solo linkato.

Bye
P8257 WebMaster non è collegato   Rispondi citando
Vecchio 19-07-2004, 10.43.03   #220
Alhazred
Made in Japan
Top Poster
 
L'avatar di Alhazred
 
Registrato: 04-07-2001
Messaggi: 4.461
Alhazred promette bene
Ok, comunque mi hai convinto che posso anche toglierlo il parametro in AggiornaCampo.
Alhazred non è collegato   Rispondi citando
Vecchio 19-07-2004, 10.45.46   #221
P8257 WebMaster
Gold Member
 
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
P8257 WebMaster promette bene
Quota:
Alhazred ha scritto:
Ok, comunque mi hai convinto che posso anche toglierlo il parametro in AggiornaCampo.
.. Più che convincerti di toglierlo, volevo sottolineare che le chiamate devono essere coerenti con gli eventuali parametri ...

Un consiglio: creati un header coi prototipi, oppure metti i prototipi all'inizio del file appena sotto i #define...

Bye
P8257 WebMaster non è collegato   Rispondi citando
Vecchio 19-07-2004, 10.56.55   #222
Alhazred
Made in Japan
Top Poster
 
L'avatar di Alhazred
 
Registrato: 04-07-2001
Messaggi: 4.461
Alhazred promette bene
Quota:
Originariamente inviato da P8257 WebMaster


.. Più che convincerti di toglierlo, volevo sottolineare che le chiamate devono essere coerenti con gli eventuali parametri ...
...
L'ho tolto perché tanto per ricreare il campo va a leggere una variabile globale (cArray[10][10]) sarebbe inutile passargliela di nuovo, giusto?
Alhazred non è collegato   Rispondi citando
Vecchio 19-07-2004, 11.00.13   #223
P8257 WebMaster
Gold Member
 
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
P8257 WebMaster promette bene
Quota:
Alhazred ha scritto:

L'ho tolto perché tanto per ricreare il campo va a leggere una variabile globale (cArray[10][10]) sarebbe inutile passargliela di nuovo, giusto?
(Y) ...

Bye
P8257 WebMaster non è collegato   Rispondi citando
Vecchio 19-07-2004, 13.29.32   #224
Alhazred
Made in Japan
Top Poster
 
L'avatar di Alhazred
 
Registrato: 04-07-2001
Messaggi: 4.461
Alhazred promette bene
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
Alhazred non è collegato   Rispondi citando
Vecchio 19-07-2004, 16.01.42   #225
Alhazred
Made in Japan
Top Poster
 
L'avatar di Alhazred
 
Registrato: 04-07-2001
Messaggi: 4.461
Alhazred promette bene
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);
}
L'int istanza mi dirà se quella in esecuzione è la prima o la seconda, dato che ci sarà da eseguire del codice diverso a seconda dell'istanza, esiste una struttura tipo il Case of che usavo ai tempi del Pascal? Come è fatta in C?
Alhazred non è collegato   Rispondi citando
Rispondi


Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti)
 
Strumenti discussione

Regole di scrittura
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is ON
Gli smilies sono ON
[IMG] è ON
Il codice HTML è OFF

Vai al forum

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

Orario GMT +2. Ora sono le: 19.34.58.


E' vietata la riproduzione, anche solo in parte, di contenuti e grafica.
Copyright © 1999-2017 Edizioni Master S.p.A. p.iva: 02105820787 • Tutti i diritti sono riservati
L'editore NON si assume nessuna responsabilità dei contenuti pubblicati sul forum in quanto redatti direttamente dagli utenti.
Questi ultimi sono responsabili dei contenuti da loro riportati nelle discussioni del forum
Powered by vBulletin - 2010 Copyright © Jelsoft Enterprises Limited.