Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [VB6] strano problema in timer

    Ciao a tutti,
    ho un progetto in cui vengono dichiarate alcune variabili globali di tipo booelan.
    Alla partenza del tutto vengono poste = false.
    A scadenze regolari di 5 minuti vengono verificate delle condizioni e la variabile globale "pippo" potrebbe vedersi assegnare true.
    Dopo tali verifiche ed assegnazioni si chiama una nuova sub che aziona un timer con interval 1100, questo fa alcune operazioni a seconda delle variabili globali boolean ed alla fine si disattiva.
    Ho notato in debug che la variabile "pippo", parte correttamente come false, viene correttamente impostata a true quando è il momento ma nel timer finale rimane sempre false come se il nuovo valore non venisse letto alla nuova attivazione del timer.
    Vi risulta che funzioni così ? C'è qualcosa che mi sfugge?

    ciao e grazie
    uomolupo

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Guarda, puoi descrivere la situazione, ma se non mostri il codice (e lo si prova) non si puo' dire molto ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    ciao, provo a metterci l'essenziale:

    Sub partenza()

    Debug.Print TimeValue(Now) & " entro in partenza"
    'Timer2.Enabled = False

    Timer3.Interval = 60000
    If closedibarra = 0 Then closedibarra = ultimoprezzo
    Timer3.Enabled = True
    '

    if condizionechetipare = true then pippo = true

    Call routine2
    End If

    End If


    End Sub

    Private Sub timer3_timer()
    Dim i As Integer
    Dim errormessage As String

    A = A + 1 ' qui per misurare 5 minuti
    If A = 5 Then
    A = 0

    ' varieistruzionioperative

    If TimeValue(Now) < orafine Then Call partenza 'rientro in partenza da cui chiamerò routine2

    if condizionechevuoi = true then pippo = false
    'qui rimetto pippo = false ma dopo che sono tornato in partenza però la condizione mi rimette pippo = false di fatto, potrebbe essere l'unico inghippo

    End If

    End Sub


    Sub routine2()
    'istruzioni di debug
    Timer1.Interval = 1100
    Timer1.Enabled = True
    ' abilito dunque timer1

    [B]End Sub[\B]

    Private Sub timer1_timer()

    if pippo = true then msgbox "ciao"
    ' e lui non lo fa, ho messo debug.print e dice che pippo = false ma dovrebbe essere true

    End If

    End Sub

  4. #4
    Utente bannato
    Registrato dal
    Mar 2007
    Messaggi
    190

    Problema NON del timer...

    ciao [uomolupo]

    Spero di aver capito correttamente.

    in comando "Debug.Print TimeValue(Now)"
    viene lanciato ogni volta che viene ri-disegnata la finestra...


    Percio, molto probabilmente, la successione è questa...
    "sub partenza" al primo disegno della finestra, poi viene eseguito
    "timer3" al termine dei 5minuti e successivamente la "rountine2", poi prosegue
    Ri-disegnando la finestra, per aggiornamento dello schermo,
    e la termine di 11secondi esegue "timer2"
    Ma ormai la variabile e modificata.

    Ti suggerisco di spostare il codice inizializzazione delle variabili in altra sede, esempio "Form_load"
    potresti mettere un "msgbox" alla funzione "Debug.Print TimeValue(Now)"
    Noterai che ogni volta che appare il "msgbox" viene rilanciata la funzine "Debug.Print TimeValue(Now)" come in un ciclo.

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Beh ... in questo modo e' tutto piu' difficile ... mi rendo conto che a volte tutto il codice non si puo' mostrare, ma cosi' non si capisce molto ...

    A parte gli End If di troppo ... non si puo' fare un test preciso se indichi

    condizionechetipare

    Cosa vuol dire?

    Se quella condizione e' sempre vera, la msgbox viene visualizzata regolarmente dal timer ... ma che prova e'?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Grazie a tutti,
    uso debug.print timevalue(now) per vedere a che ora passo nelle diverse fasi del codice.

    Oregon dice correttamente che il msgbox verrebbe visualizzao sempre ed è proprio questo il punto, pippo dovrebbe essere true e lo è anche nella routine2 (ho messo un debug.print di verifica anche lì) ma poi nel timer è false. Forse però scrivendo qui ho capito dove sta l'arcano:

    da routine2 con pippo = true si azione il timer2 e si torna in partenza diciamo in contemporanea, al rientro in partenza pippo viene messo false (vedi codice), il timer1 non ha ancora terminato i suoi 1100 secondi e quindi fa partire l'istruzione quando pippo è già stato rimesso false, forse conviene mettere il ritorno in partenza alla fine di timer1, cioè quando ha finito tutti i suoi cicli e viene disabilitato.
    CIao
    uomolupo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.