|
| 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 » | |
![]() |
#286 |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
![]() |
Dovrò aggiungere lo Sleep anche nella mia battaglia navale per andare sul sicuro? |
![]() |
![]() |
![]() |
#287 |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
![]() |
Credo che ormai ci sia tutto il necessario per far funzionare il programma (mi rifrisco alle funzioni di contorno), allego l'ultimo codice aggiornato. Mancano ancora i controlli per gli accessi in memoria condivisa. Al momento ho questo problema, la prima istanza parte e si ferma in attesa della seconda, ma la seconda non riesce ad attaccare la memoria condivisa creata dalla prima ed ovviamente si blocca il tutto.
Quale può essere il problema? P.S. la sequenza di operazioni all'interno di PrimaIstanza() e SecondaIstanza() non le ho ancora accertate, per ora le ho buttate giù come mi venivano in mente, ma credo ci sia qualcosa da rivedere. |
![]() |
![]() |
![]() |
#288 |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
![]() |
Ho dimenticato l'allegato
![]() |
![]() |
![]() |
![]() |
#289 |
Gold Member
WT Expert
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
![]() ![]() ![]() |
Non ci siamo.
![]() Prendi un pezzo di carta e scrivi cosa fa il programma passo dopo passo. Tieni presente che: 1) CreateSemaphore abilita la possibilità di utilizzare i semafori ma fino a quando non utilizzi OpenSemaphore, tu non lo hai reso attivo. 2) WaitForSingleObject lo puoi usare dopo l'apertura del semaforo e poichè hai utilizzato INFINITE, il programma si bloccherà immediatamente e rimarrà in attesa da subito. Il flusso delle istruzioni non procederà fino a quando non verrà rilasciato il semaforo. 3) La prima istanza esegue il codice tra il primo if ed else, mentre la seconda istanza dall'else in poi. "Prendi un pezzo di carta e scrivi cosa fa il programma passo dopo passo." Non pensare sia una perdita di tempo. IL "C" E' UNA BRUTTA BESTIA Prima di passare al modulo successivo, accertati che il primo funzioni (Un buon programmatore è prima di tutto analista di se stesso) |
![]() |
![]() |
![]() |
#290 |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
![]() |
Sicuro che devo anche aprirli e non basta il CreateSemaphore(...)?
Guarda questo esempio, è stato fatto dal mio professore. In questo file ci sono 2 processi "Standby process" e "Calling process", il primo crea i semafori senza poi gli OpenSemaphore(...) e comunque funziona. Stesso discorso per il CreateFileMapping, poi non c'è OpenFileMapping. ![]() |
![]() |
![]() |
![]() |
#291 |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
![]() |
Mi sono dimenticato un'altra volta l'allegato
|
![]() |
![]() |
![]() |
#292 |
Gold Member
WT Expert
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
![]() ![]() ![]() |
E' vero, si può fare anche così:
Codice:
#include <windows.h> #include <stdio.h> #include <conio.h> HANDLE sem,sem1; void Blocco(char *s){ // sem=OpenSemaphore(SEMAPHORE_ALL_ACCESS,FALSE,"semaforo"); printf(s); printf("\nB L O C C A T O."); WaitForSingleObject(sem,INFINITE); } int main(void){ sem=OpenSemaphore(SEMAPHORE_ALL_ACCESS,FALSE,"semaforo"); sem1=OpenSemaphore(SEMAPHORE_ALL_ACCESS,FALSE,"semaforo1"); if(sem!=NULL && sem1!=NULL){ printf("Sono ammesse solo 2 istanze del programma !"); Sleep(1000); return 0; } if(sem==NULL){ printf("Prima istanza del programma."); sem=CreateSemaphore(NULL,0,1,"semaforo"); Blocco("\nResta in attesa della seconda istanza..."); CloseHandle(sem1); printf("\nRilasciato"); } else{ CreateSemaphore(NULL,0,1,"semaforo1"); printf("Seconda istanza del programma\nPremi invio per " "rilasciare il semaforo della prima istanza..."); getch(); ReleaseSemaphore(sem,1,NULL); return 0; } getch(); CloseHandle(sem); return 0; } Adesso tutto dovrebbe essere più chiaro...credo. ![]() |
![]() |
![]() |
![]() |
#293 | |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
![]() |
Quota:
![]() |
|
![]() |
![]() |
![]() |
#294 | |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
![]() |
Quota:
Se invece a te risulta sbagliato ti prego di farmi notare qual'è il problema, perché io proprio non riesco a vederlo... a parte il fatto che la seconda istanza non riesce ad attaccare la memoria condivisa creata dalla prima e quindi non si va avanti ![]() |
|
![]() |
![]() |
![]() |
#295 |
Gold Member
WT Expert
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
![]() ![]() ![]() |
O porca paletta, lascia perdere le due funzioni PrimaIstanza e SecondaIstanza che hai definito (mettici \\ davanti)
Cosa deve fare la prima istanza ? La prima istanza deve attendere il lancio della seconda. Lo fa ? La seconda istanza deve rilasciare il semaforo. Lo fa ? Prima del release metti un getch()) Quando vi sono tutte e due le istanze aperte, l'apertura di una terza istanza deve segnalare che ci sono già due istanze aperte. Lo Fa ? Cribbio Alh, metti a posto questo prima di passare al resto. Più vai avanti e più t'incasini altrimenti. Cribbio, devi avere chiaro cosa deve fare il programma e prestare la massima attenzione alle sezioni critiche. La solzione è dietro l'angolo ed arrivarci da soli significa aver imparato Hai scritto di tutto e di più ma non funziona una s..a. Se fossi da solo come te la caveresti ? Fortuna che hai chi ti da una mano ma per piacere, scindi il problema in più sottoproblemi e non andare avanti FINCHE' il problema precedente non è OK !!! |
![]() |
![]() |
![]() |
#296 |
Gold Member
WT Expert
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
![]() ![]() ![]() |
C@zzo Alh, dai che ce la fai (Y).
|
![]() |
![]() |
![]() |
#297 | |||
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
![]() |
E' da un secolo che ti sto dicendo che è questo che voglio fare, non ci sto proprio pensando ad arrivare a PrimaIstanza e SecondaIstanza!!!
Io ho scritto prima istanza e seconda istanza riferendomi al programma che parte per primo e quello che parteper secondo, non alle funzioni contenute nel codice! Per quanto sto dicendo: PrimaIstanza != prima istanza SecondaIstanza != seconda istanza Spero di essermi spiegato ![]() Ora: Quota:
Quota:
Appena parte il programma per la seconda volta il primo va avanti. Quota:
Per darti le risposte non ho controllato solo su carta, ho fatto girare il programma, quindi sono ancora più sicuro di prima che il flusso è giusto, solo non capisco gli errori nell'apertura e aggancio della memoria condivisa. |
|||
![]() |
![]() |
![]() |
#298 |
Gold Member
WT Expert
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
![]() ![]() ![]() |
Mi fai solo un piacere ?
Mettimi a posto l'allegato (io ho già individuato il problema). Trattasi di una tua svista che è causa del troppo codice che hai scritto senza prestare attenzione. |
![]() |
![]() |
![]() |
#299 |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
![]() |
Eccolo
|
![]() |
![]() |
![]() |
#300 |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
![]() |
Aspetta, mi ero dimenticato di controllare le istanza dopo la seconda, lo sto mettendo a posto adesso.
|
![]() |
![]() |
![]() |
Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti) | |
Strumenti discussione | |
|
|
![]() |
||||
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 |