Newsgroup: it.comp.lang.visual-basic
Titolo: evento timer del controllo Timer ( VB6)

se nel momento dell'evento timer  visual basic è impegnato in altra 
attività,cosa succede?
Se ad esempio un evento ha un intervallo di 60 secondi ,cosa succede se allo 
scoccare del 60esimo secondo  VB è impegnato? Salta l'evento oppure lo 
esegue appena può?
 
ciao 
 
 

"luigi" <a...@aworrrnder.pp> ha scritto nel messaggio
news:527fd29f$0$1379$
4faf...@reader1.news.tin.it
 

ferma tutto (il codice vb) e fa quello che deve fare il timer
 
-- 
-> G.Chiappori
www.chiappori.it
 
www.chiappori.com
 
 
 

salvare sta cosa qua sotto con nome form1.frm ed aprirla con vb5/6
 
 
 
VERSION 5.00
Begin VB.Form Form1
   Caption         =   "Form1"
   ClientHeight    =   984
   ClientLeft      =   1452
   ClientTop       =   1536
   ClientWidth     =   6564
   BeginProperty Font
      Name            =   "Segoe UI"
      Size            =   7.8
      Charset         =   0
      Weight          =   400
      Underline       =   0   'False
      Italic          =   0   'False
      Strikethrough   =   0   'False
   EndProperty
   LinkTopic       =   "Form1"
   ScaleHeight     =   984
   ScaleWidth      =   6564
   Begin VB.CheckBox chkGO
      Caption         =   "go"
      BeginProperty Font
         Name            =   "Segoe UI"
         Size            =   13.8
         Charset         =   0
         Weight          =   700
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
      Height          =   876
      Left            =   3672
      Style           =   1  'Graphical
      TabIndex        =   0
      Top             =   72
      Width           =   1380
   End
   Begin VB.Timer timTEST
      Enabled         =   0   'False
      Interval        =   3000
      Left            =   5472
      Top             =   180
   End
   Begin VB.Label lblTIM
      Alignment       =   2  'Center
      Appearance      =   0  'Flat
      BackColor       =   &H80000005&
      BackStyle       =   0  'Transparent
      Caption         =   "0"
      BeginProperty Font
         Name            =   "Segoe UI"
         Size            =   10.2
         Charset         =   0
         Weight          =   700
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
      ForeColor       =   &H80000008&
      Height          =   300
      Left            =   108
      TabIndex        =   2
      Top             =   612
      Width           =   3432
   End
   Begin VB.Label lblMON
      Alignment       =   2  'Center
      Appearance      =   0  'Flat
      BackColor       =   &H80000005&
      BackStyle       =   0  'Transparent
      Caption         =   "0"
      BeginProperty Font
         Name            =   "Segoe UI"
         Size            =   16.2
         Charset         =   0
         Weight          =   700
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
      ForeColor       =   &H80000008&
      Height          =   408
      Left            =   108
      TabIndex        =   1
      Top             =   108
      Width           =   3432
   End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit
 
Sub secSLEEP(quaNTO As Single)
 
    Dim A As String
    Dim l As Single, m As Single, p As Single
 
    l = Timer + quaNTO
 
    Do
        m = Timer
        lblTIM.Caption = Format(m, "#,##0")
        DoEvents
    Loop Until l = m
 
End Sub
 
Private Sub chkGO_MouseUp(Button As Integer, Shift As Integer, X As 
Single, Y As Single)
 
    Dim l As Long, m As Long, p As Long
    Dim A As String, B As String, C As String
 
    l = 0
    timTEST.Enabled = True
    DoEvents
 
    Do
        DoEvents
        If chkGO.Value = vbUnchecked Then Exit Do
'------------------------------------------------------------
        l = l + 1
        lblMON.Caption = Format(l, "#,##0")
        DoEvents
        If l > 500000 Then l = 0
    Loop
 
    lblMON.Caption = "0"
    timTEST.Enabled = False
 
End Sub
 
 
Private Sub timTEST_Timer()
 
    secSLEEP 3
 
End Sub
 
 
 
 

 ferma tutto (il codice vb) e fa quello che deve fare il timer
 
Beh, mica tanto.
 
Non è un concetto di vb6, è proprio windows che tiene in stack l'evento 
del timer e aspetta che il software chieda "cosa c'è da gestire 
adesso?".
 
Tant'è che per avere lo 'scatto' del timer in tempi più o meno precisi, 
occorre mettere DoEvents nel proprio codice, che è proprio una 
forzatura con cui si impone al software di fare un polling dello stack 
degli eventi.
Ma l'OP non parlava di loop, quindi non è detto che neppure con 
DoEvents si possa gestire. Se il sw è ad esempio in fase di gestione di 
un accesso alla rete, di quelli che restano lì per 30", il timer può 
scattare finchè vuole.
 
Quindi la risposta giusta è che il timer aspetta che il sw si liberi.
 
Alberto
 
 

 si possa gestire.
 
sě,nell'evento timer non ci sono loop,c'č solo l'incremento di una variabile 
statica ( siccome mi serve l'esecuzione di istruzioni ogni ora,e 
l'intervallo massimo del timer č 1 minuto,incremento di 1 una variabile ad 
ogni scocco dell'evento,cosě alla 60 esima chiamata č passata 1 ora ed 
esegue le operazioni).
 
Un mio collega disse anche lui che č il timer ad aspettare il sistema,e non 
viceversa.
E mi disse che per ovviare a ciň,bastava inserire nella procedura di evento 
un controllo all'orologio di sistema del computer...ma non ho mai capito 
cosa intendesse dire o fare...
 
ciao 
 
 

 intendesse dire o fare...
 
Credo volesse dire che per avere maggior precisione non devi basarti 
sul conteggio di una variabile ad ogni evento timer, ma far scattare il 
timer molto velocemente, ad ogni scatto leggere l'ora del sistema 
operativo e confrontarla con la data/ora dell'ultima esecuzione valida. 
Se sono passati 60' esegui ciò che ti serve.
 
Alberto