Newsgroup: it.comp.lang.visual-basic
Titolo: come creare un attesa

Ho il seguente problema:
vorrei fare in modo che il codice eseguito al verificarsi di un determinato
evento, facesse una pausa, ovvero
1° blocco istruzioni
PAUSA DI n SECONDI
2° blocco istruzioni
come posso fare a fare la pausa?
Grazie.

, The CBc 
(
NOSPAM...@libero.it
) proferì le seguenti parole...

Un modo per simulare una pausa di n secondi è attuabile con la seguente 
subroutine (VB6)
Sub Delay(x As Long)
  Dim t1 As String, t2 As String
 
  t1 = Time
  Do
    t2 = Time
  Loop Until DateDiff("s", t1, t2) >= x
End Sub
La puoi richiamare fra i due blocchi di istruzioni.
-- 
|-----------------------------------------------|
|Davide Guida          >>> 
davide...@email.it
|
|-----------------------------------------------|

> come posso fare a fare la pausa?
Per la pausa potresti:
1) Sfruttare l'API Sleep(ByVal T As Long), in cui T esprime il numero di 
millisecondi.
2) Eseguire un ciclo do... loop (come già suggerito) in cui controlli 
costantemente l'ora di sistema per accertarti che siano trascorsi n 
secondi da quando hai deciso di intraprendere il loop.
La prima però ti congela il programma per tutto il tempo richiesto, 
quindi non puoi fare altro nel frattempo (ma nemmeno cliccarc i e 
compagnia bella) e se sbagli a calcolarti il tempo son cavoli.
La seconda però è meno accurata.
Forse un misto delle due sarebbe l'ideale: un loop in cui richiami 
diverse sleep.
-- 
Quando noi ignoranti eravamo di più,
tutto era più bello...
(A. Celentano)

End Sub
Per favore, non diciamo boiate.
Questi accrocchi si usavano ai tempi del QBasic sotto Dos.
Funzione Sleep()
Call Sleep(dwMilliseconds)
Per la dichiarazione vedi MSDN o scarica l'API guide e l'API viewer da
http://www.mentalis.org/index2.shtml
Ciao
--
NeoDataType : 
http://www.neodatatype.net
Sito Comune : 
http://www.it-lang-vb.net
--
NeoDataType : 
http://www.neodatatype.net
Sito Comune : 
http://www.it-lang-vb.net

 La seconda però è meno accurata.
E ti inchioda il PC ;) (controllare il task manager per credere)


 evento, facesse una pausa, ovvero
Dopo diverse prove ho ricavato questa funzione, che ha il duplice vantaggio
di non bloccare il programma e di non occupare la CPU inutilmente...
In pratica è una combinazione delle due tecniche sopraesposte.
    Dim SecTimeOut as long
    Dim TimeIniziale As Date
    Dim TimeAttuale As Date
    TimeIniziale = Now
    Do
        Sleep 100
        DoEvents
      'Confronta il Time iniziale con quello attuale, se sono stati superati
TOT secondi esce.
        TimeAttuale = Now
        If DateDiff("s", TimeIniziale, TimeAttuale) > SecTimeOut Then Exit
Function
    Loop

 Function
Con l'aiuto della GetTickCount() si potrebbe alleggerire ulteriormente il
carico della CPU evitanto tra l'altro la DateDiff che non spicca certo per
performaces.


 ha scritto nel messaggio
news:PN6Rc.32052$1V3.7...@twister2.libero.it...

Inserisci un timer con la proprietà intervel settata su i secondi per mille
(è in millisecondi)
dividi il codice in due sub che io chiamo alfa e beta
public sub alfa()
 codice
 codice
 codice
 timer.enabled=true
end sub
private sub timer_timer
 beta
end sub
public sub beta()
 timer.enabled=False
 codice
 codice
 codice
end sub
--
Mauro Cerreto
www.cerretosoft.it

 che non spicca certo per performaces.
Mi hai fregato di un minuto :-P. Tra l'altro, avevo pensato anche
alla Timer, poi mi sono ricordato del problema della mezzanotte :-)
Bye, G.

 performaces.
Giusto, però mi viene in mente una cosa... GetTickCount restituisce un long,
che corrisponde (se non ho sbagliatio i calcoli) a un massimo di ~25 giorni,
poi IMHO si azzera e riparte a contare, per cui bisognerà tenerne conto...


Più o meno :-)
Remarks
The elapsed time is stored as a DWORD value. Therefore, the time
will wrap around to zero if the system is run continuously for 49.7 days.
Il che mi ricorda un veeeeecchio bug di NT, non ricordo neanche
se era il 3.51 o il 4.0 prima versione (se tento di ripensarci mi viene
mal di testa :-), forse era il 98 ?), che si piantava dopo un certo
periodo (anche se a memoria avrei detto 53 giorni) proprio per un
problema simile [1]. Però c'è una discussione interessante qui:
http://weblogs.asp.net/chuckop/archive/2004/04/05/107912.aspx
[1] Pensandoci meglio, credo che il mio neurone sia rimasto
incastrato fra le due sinapsi rimaste. Sul 98 prima edizione
c'era di sicuro quel bug, su NT si azzerava l'uptime... forse ;-).
Bye, G.

> will wrap around to zero if the system is run continuously for 49.7 days.
Cioč 25 * 2, infatti avevo considerato solo i valori positivi dato che la
suddetta API richiamata da VB restituisce un numero positivo.
Mi chiedo cosa succeda dopo il raggiungimento del 25esimo giorno... a occhio
direi che si passa ai valori negativi in crescendo per arrivare allo zero al
50esimo giorno... (che paciugo :-)

 ha scritto nel messaggio
news:CFaRc.32268$1V3.7...@twister2.libero.it...


 Questi accrocchi si usavano ai tempi del QBasic sotto Dos.
Be non esageriamo :-)
Se non ricordo male anche il Qbasic aveva la sua istruzione Sleep (o
sto confondendo con il QuickBasic?)
-- 
Daniele Pinna  (leva oops. per rispondere) * ICQ "chiedilo"
Sito Web: Il DoCFa in Pillole: 
www.dapinna.com

 sto confondendo con il QuickBasic?)
Ce l'hanno entrambi...