|
| 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 » | |
![]() |
#346 |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
![]() |
![]() Posso mettere un'altro buffer, ad esempio char buffer[50]; Ma poi come devo gestirlo? |
![]() |
![]() |
![]() |
#347 |
Gold Member
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
![]() |
Sto pensando al modo più semplice e meno invasivo per farlo...
Bye ![]() |
![]() |
![]() |
![]() |
#348 |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
![]() |
Ok, allora attendo, grazie
![]() |
![]() |
![]() |
![]() |
#349 |
Gold Member
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
![]() |
... E qui viene buono un'altra volta l'utilizzo del timestamp.. scusate se sono fissato...
Dunque, a mio avviso il modo per ovviare in maniera meno invasiva al problema seguente è: Implemetnare nel tipo dati strutturato un campo timestamp, come discusso nei post precedenti: L'istanza attiva registra il timestamp una volta FINITE tutte le transazioni sulla memoria condivisa, a questo punto viene rilasiato il semaforo e la seconda istanza prende il controllo... Si passa all'analisi dei dati e alla lettura del nuovo colpo, questa operazione può richiedere pochi millisecondi, a questo punto nella funzione di lettura dei dati si procede alla lettura del timestamp stesso e alla generazione del timestamp attuale... Se la differenza tra il timestamp attuale e quello registrato dall'istanza precedente in memoria condivisa è troppo piccola, allora vuol dire che le varie "getch()" precedenti hanno letto dei valori in un buffer fasullo e bisogna considerarli non validi e procedere ad una seconda rilettura ... Inoltre: nei precedenti post è stato chiesto a cosa servisse l'uso di un timestamp all'intero di processi condivisi .. rispondo che è molto utile, in questo caso potrebbe anche "salvarti" nel caso in cui una delle istanze vada in crash, semplicemente permettendoti di gestire un timeout ... Fai un fischio se ti serve codice ![]() Bye ![]() |
![]() |
![]() |
![]() |
#350 |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
![]() |
Per il codice aspettiamo, provo a scrivere qualcosa io e vediamo se mi riesce
![]() Ho una domanda sul timestamp. Non formattato esce una cosa del tipo 1091608278 cosa sono? millisecondi? Se scrivo ad esempio ... time_t tempo1; time_t tempo2 time(&tempo1); //e risulti per esempio 1091608278 ... time(&tempo2); if(tempo2 > tempo1 + 5); ... l'istruzione if controlla se tempo2 è maggiore di 1091608278+5 ( e cioè 1091608283)? |
![]() |
![]() |
![]() |
#351 |
Gold Member
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
![]() |
Esattamente, millisecondi dalla mezzanotte della notte dei tempi
![]() ![]() Bye ![]() |
![]() |
![]() |
![]() |
#352 |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
![]() |
Ho messo questo codice subito prima di while((Answer != 's') && (Answer != 'S')) in Colpo()
Codice:
tempo1 = p->timeStmp; time(&tempo2); while(tempo2 < tempo1 + 2) { printf("\ntempo1: %ld\n",tempo1); printf("tempo2: %ld\n",tempo2); scanf(&buffer); time(&tempo2); } Così com'è cicla solo se do invio, altrimenti resta in attesa, ferma su scanf, se invece metto getch() per farla ciclare devo premere invio ogni volta che si arriva a getch() (ed è ovvio, aggiungerei). Come posso fare per far partire il ciclo senza dover premere invio? Edit: avevo dimenticato 2 righe prima del while. |
![]() |
![]() |
![]() |
#353 |
Gold Member
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
![]() |
Guarda...
io implementerei il tutto nel ciclo principale dove fai le getch() se alla fine del ciclo principale (quindi prima di valorizzare mArray), ti rendi conto che l'intervallo di tempo attuale è troppo vicino all'intervallo di tempo registrato in memoria condivisa allora molto probabilmente l'utente non avrà fatto in tempo ad inserire i valori ma i valori saranno stati presi erroneamente dalle getch in un buffer non valido, a quel punto resetti tutte le variabili e fai il ciclo principale da capo... Bye ![]() |
![]() |
![]() |
![]() |
#354 |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
![]() |
Ma se inserisco solo la coordinata della colonna nella console sbagliata, quando sarà realmente ora di inserire le coordinate in quella console, apparirà inserita solo la lettera della colonna, e attenderà il numero per la riga, non si arriva in fondo per poter fare il controllo ed eventualmente riproporre l'inserimento delle coordinate, per questo il controllo vorrei farlo prima.
|
![]() |
![]() |
![]() |
#355 |
Gold Member
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
![]() |
Potresti scrivere un controllo sotto ogni getch()...
Bye ![]() |
![]() |
![]() |
![]() |
#356 |
Gold Member
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
![]() |
Oppure potresti scrivere il conrollo direttamente nella condizione del while... cosa molto più elegante
Bye ![]() |
![]() |
![]() |
![]() |
#357 |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
![]() |
Non so se è bello, ma ho fatto il controllo così e funziona
Codice:
time(&tempo1); time(&tempo2); while(tempo2 < tempo1 + 2) { buffer = getch(); while((c_col < 65) || (c_col > 74)) c_col = getch(); time(&tempo2); } Commenti? |
![]() |
![]() |
![]() |
#358 |
Gold Member
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
![]() |
Il principio è esatto e l'hai capito .. forse a colpo d'occhio ti renderai conto che c'é del codice ridondante che può essere quindi inglobato nella condizione del ciclo principale ..
E' solo una questione stilistica, nulla da dire sulla tua implemetnazione ![]() Bye ![]() |
![]() |
![]() |
![]() |
#359 |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
![]() |
Ti riferisci ai time(&time1); ?
|
![]() |
![]() |
![]() |
#360 |
Gold Member
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
![]() |
Aggiungo ..
il T1 va chiaramente acquisito dalla memoria condivisa, mentre il T2 va generato all'istante... Bye ![]() |
![]() |
![]() |
![]() |
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 |