Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - [VB.NET] Cronometro
Forum - C# / VB.NET - [VB.NET] Cronometro

Avatar
Fr4nk94 (Normal User)
Rookie


Messaggi: 29
Iscritto: 07/04/2010

Segnala al moderatore
Postato alle 17:11
Domenica, 18/04/2010
Risalve a tutti...
sto costruendo un cronometro sensibile al centesimo di secondo...
ho impostato l'applicazione in modi simile a quella che si può scaricare da questo sito (qui -> http://www.pierotofy.it/pages/sorgenti/dettagli/18211-Cron ... ma appunto agiungendo i centesimi di secondo...
il mio problema sta in questa parte di codice:
Codice sorgente - presumibilmente VB.NET

  1. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
  2.         Dim sec As Integer = txtTEMPO.Text.Substring(3, 2)
  3.         Dim cen As Integer = txtTEMPO.Text.Substring(6, 1)
  4.         Dim min As Integer = txtTEMPO.Text.Substring(0, 2)
  5.  
  6.         If cen Mod 99 = 0 And cen > 0 Then
  7.             sec += 1
  8.             txtTEMPO.Text = Format(min, "00") & ":" & Format(sec, "00") & ":00"
  9.  
  10.         ElseIf sec Mod 59 = 0 And sec > 0 Then
  11.             min += 1
  12.             txtTEMPO.Text = Format(min, "00") & ":00:" & Format(cen, "00")
  13.  
  14.         Else
  15.             cen += 1
  16.             txtTEMPO.Text = Format(min, "00") & ":" & Format(sec, "00") & ":" & Format(cen, "00")
  17.  
  18.         End If
  19.     End Sub



praticamente il cronometro nn scorre ( o meglio a 00:00:01 si ferma...:asd: ) e il codice soprariportato l'ho girato in miliardi di modi eppure succede sempre qualcosa di sbagliato...
Qualcuno riesce ad aiutare un povero nabbo ( :pat: ) come me??

(inoltre vi rimando alla mia precedente discussione in cui ho aggiunto una domanda... solo che è un po' in basso e nn si vede quasi più...http://www.pierotofy.it/pages/extras/forum/16/1003395-[vbn ...
GRZ 1000:asd:

Ultima modifica effettuata da Fr4nk94 il 18/04/2010 alle 17:13


Un hacker è una persona che si impegna nell'affrontare sfide intellettuali per aggirare o superare creativamente le limitazioni che gli vengono imposte in tutti gli aspetti della sua vita :)
PM Quote
Avatar
walker93 (Member)
Expert


Messaggi: 460
Iscritto: 31/01/2010

Segnala al moderatore
Postato alle 18:40
Domenica, 18/04/2010
mi chiedo il motivo del tuo utilizzo di MOD nelle condizioni...

devi controllare che siano maggiori di 59 o 99 e non controllare se sono pari controllando il resto della divisione

il problema sta nelle condizioni...


Il software è come il sesso, è meglio quando è libero.
Linus Torvalds, Conferenza della Free Software Foundation, 1996 (attribuito)

Non provare mai a spiegare il computer a un profano. È più facile spiegare il sesso a una vergine.
Robert Anson Heinle
PM Quote
Avatar
Gianluca87 (Ex-Member)
Expert


Messaggi: 300
Iscritto: 16/11/2008

Segnala al moderatore
Postato alle 0:23
Lunedì, 19/04/2010
Ciao, credo che tu sia totalmente fuori strada...
il programma che hai scritto tu forse era adeguato per VB 6
se usi l'infrastruttura .net prova a guardare le classi DateTime e TimeSpan


a domanda precisa, risposta precisa...
a domanda generica, risposta generica...
PM Quote
Avatar
Thejuster (Member)
Guru^2


Messaggi: 1844
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 13:36
Lunedì, 19/04/2010
ti si blocca perchè non azzeri i contantori.
quindi arrivati a 59 o 99 rimane fermo e quindi i numeri non si incremento.

ti posto questo piccolo esempio di codice ottimizzato
spero che ti sia di aiuto :k:
PS. te lo scrivo in c# perchè odio il vb.net :rotfl:


Codice sorgente - presumibilmente C#

  1. public static int cent = 20, sec = 1, min = 0,ore = 0;
  2. private void Timer1_Tick(Object sender,e args) {
  3.  
  4. if (cent == 99) sec++; cent = 0;
  5. if (sec == 59) min++; sec = 0;
  6. if (min == 59) ore++; min = 0;
  7.  
  8. txtTempo.Text = Check(cent) + ":" + Check(sec) + ":" + Check(min);
  9.  
  10. }
  11.  
  12.  public static string Check(int value)
  13.         {
  14.             string c = value.ToString();
  15.             return c.Length > 1 ? c : "0" + c;
  16.         }





Ultima modifica effettuata da Thejuster il 19/04/2010 alle 13:39


PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 18:33
Martedì, 20/04/2010
Questo metodo è decisamente poco funzionale. Il tuo cronometro è sottoposto a un numero enorme di errore dovuti al timing e all'approssimazione. Usa semplicemente una differenza di valori Date, che restituisce una differenza di tempi precisa al ciclo di clock e sincronizzata con l'orologio interno del computer (anche se salti un tick del timer, ad esempio, rimane comunque una misura "esatta").
Date.Now restituisce la data (e l'ora) corrente. La differenza di Date restituisce un valore di tipo TimeSpan. Documentati su msdn.


"Infelici sono quelli che hanno tanto cervello da vedere la loro stupidità."
(Fligende Blatter)

"Dubitare di se stessi è il primo segno d'intelligenza."
(Ugo Ojetti)
PM Quote