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 27-07-2004, 11.20.01   #286
Alhazred
Made in Japan
Top Poster
 
L'avatar di Alhazred
 
Registrato: 04-07-2001
Messaggi: 4.461
Alhazred promette bene
Sto facendo qualche prova per vedere come funziona il timestamp, ho scritto un programmino stupido che rileva un primo timestamp e lo stampa in output, poi in output manda un'altra stringa (tanto per fargli fare qualcosa), quindi rileva un nuovo timestamp per mandarlo in output. Mi sono reso conto che i due timestamp erano uguali, ovvero non è stato impiegato abbastanza tempo per far cambiare il timestamp nell'eseguire le operazioni, ho aggiunto una Sleep(500) dopo la stampa della stringa e il secondo timestamp è risultato maggiore del primo.
Dovrò aggiungere lo Sleep anche nella mia battaglia navale per andare sul sicuro?
Alhazred non è collegato   Rispondi citando
Vecchio 27-07-2004, 12.30.00   #287
Alhazred
Made in Japan
Top Poster
 
L'avatar di Alhazred
 
Registrato: 04-07-2001
Messaggi: 4.461
Alhazred promette bene
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.
Alhazred non è collegato   Rispondi citando
Vecchio 27-07-2004, 12.30.54   #288
Alhazred
Made in Japan
Top Poster
 
L'avatar di Alhazred
 
Registrato: 04-07-2001
Messaggi: 4.461
Alhazred promette bene
Ho dimenticato l'allegato
Alhazred non è collegato   Rispondi citando
Vecchio 27-07-2004, 13.26.46   #289
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
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)
LoryOne non è collegato   Rispondi citando
Vecchio 27-07-2004, 13.46.05   #290
Alhazred
Made in Japan
Top Poster
 
L'avatar di Alhazred
 
Registrato: 04-07-2001
Messaggi: 4.461
Alhazred promette bene
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.
Alhazred non è collegato   Rispondi citando
Vecchio 27-07-2004, 13.46.40   #291
Alhazred
Made in Japan
Top Poster
 
L'avatar di Alhazred
 
Registrato: 04-07-2001
Messaggi: 4.461
Alhazred promette bene
Mi sono dimenticato un'altra volta l'allegato
Alhazred non è collegato   Rispondi citando
Vecchio 27-07-2004, 14.49.57   #292
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
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;
}
...poichè il valore di sem è determinato dal primo CreateSemaphore.
Adesso tutto dovrebbe essere più chiaro...credo.
LoryOne non è collegato   Rispondi citando
Vecchio 27-07-2004, 15.52.03   #293
Alhazred
Made in Japan
Top Poster
 
L'avatar di Alhazred
 
Registrato: 04-07-2001
Messaggi: 4.461
Alhazred promette bene
Quota:
Originariamente inviato da LoryOne
E' vero, si può fare anche così:
...
...poichè il valore di sem è determinato dal primo CreateSemaphore.
Adesso tutto dovrebbe essere più chiaro...credo.
Non è che doveva essere più chiaro, lo era anche quando l'hai postato l'altra volta , solo che mi chiedevo se fare aprire i semafori al processo che li aveva creati non fosse un'operazione ridondante.
Alhazred non è collegato   Rispondi citando
Vecchio 27-07-2004, 15.58.02   #294
Alhazred
Made in Japan
Top Poster
 
L'avatar di Alhazred
 
Registrato: 04-07-2001
Messaggi: 4.461
Alhazred promette bene
Quota:
Originariamente inviato da LoryOne
[B]...
"Prendi un pezzo di carta e scrivi cosa fa il programma passo dopo passo."
Non pensare sia una perdita di tempo.
...
Ho preso carta e penna, mi sono scritto i passaggi che vengono effettuati dalle due istanze. Per adesso mi interessa che parta la prima, si metta in attesa della seconda, parta la seconda e comunichi alla prima che è pronta... mi pare che il flusso fin qui sia corretto.
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 (consigli/cause riguardanti questo problema?)
Alhazred non è collegato   Rispondi citando
Vecchio 27-07-2004, 16.59.50   #295
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
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 !!!
LoryOne non è collegato   Rispondi citando
Vecchio 27-07-2004, 17.12.15   #296
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
C@zzo Alh, dai che ce la fai (Y).
LoryOne non è collegato   Rispondi citando
Vecchio 27-07-2004, 17.15.25   #297
Alhazred
Made in Japan
Top Poster
 
L'avatar di Alhazred
 
Registrato: 04-07-2001
Messaggi: 4.461
Alhazred promette bene
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:
La prima istanza deve attendere il lancio della seconda.
Lo fa ?
Si, appare la scritta "In attesa dell'avversario...", cursore lampeggiante e si ferma (non termina)
Quota:
La seconda istanza deve rilasciare il semaforo.
Lo fa ?
Si, se tolgo il controllo della memoria condivisa (che non si apre).
Appena parte il programma per la seconda volta il primo va avanti.
Quota:
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 ?
Per le istanze successive alla seconda si apre la console vuota.

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.
Alhazred non è collegato   Rispondi citando
Vecchio 27-07-2004, 18.57.50   #298
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
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.
LoryOne non è collegato   Rispondi citando
Vecchio 27-07-2004, 19.41.51   #299
Alhazred
Made in Japan
Top Poster
 
L'avatar di Alhazred
 
Registrato: 04-07-2001
Messaggi: 4.461
Alhazred promette bene
Eccolo
Alhazred non è collegato   Rispondi citando
Vecchio 27-07-2004, 19.45.06   #300
Alhazred
Made in Japan
Top Poster
 
L'avatar di Alhazred
 
Registrato: 04-07-2001
Messaggi: 4.461
Alhazred promette bene
Aspetta, mi ero dimenticato di controllare le istanza dopo la seconda, lo sto mettendo a posto adesso.
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: 07.48.45.


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.