Comment retarder L'exécution du code dans Visual Basic (VB6)?

j'ai un long processus en cours dans VB6 que je veux finir avant d'exécuter la prochaine ligne de code. Comment puis-je le faire? Fonction intégrée? Puis-je contrôler combien de temps attendre?

exemple Trivial:

Call ExternalLongRunningProcess
Call DoOtherStuff

comment retarder 'DoOtherStuff'?

10
demandé sur Ray Vega 2008-09-18 22:09:44

7 réponses

VB.Net: je voudrais utiliser un WaitOne poignée d'événement.

VB 6.0: j'ai vu une boucle de DoEvents.

Do
     If isSomeCheckCondition() Then Exit Do
     DoEvents
Loop

enfin, vous pouvez simplement dormir:

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sleep 10000
11
répondu Nescio 2008-09-18 18:29:43

alors que Nescio est réponse (DoEvents) va fonctionner, il va provoquer votre application à utiliser 100% d'un CPU. Sommeil va rendre l'INTERFACE ne répond pas. Ce que vous avez besoin est une combinaison des deux, et la combinaison magique qui semble fonctionner le mieux est:

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

While IsStillWaitingForSomething()
    DoEvents
    DoEvents
    Sleep(55)
Wend

pourquoi deux DoEvents, et un sommeil de 55 millisecondes? Le sommeil de 55 millisecondes est la plus petite tranche que VB6 peut supporter, et l'utilisation de deux DoEvents est parfois nécessaire dans les cas où super-réactivité est nécessaire (pas par L'API, mais si votre application répond à des événements extérieurs, SendMessage, Interupts, etc.).

15
répondu Kris Erickson 2017-05-23 12:00:10

Comment déterminer si un procédé à L'écaille S'est terminé

si vous appelez un processus externe, alors vous l'appelez de façon asynchrone. Reportez-vous au document de Soutien MS ci-dessus pour savoir comment attendre que votre processus externe soit terminé.

2
répondu Sean Gough 2008-09-18 18:25:49

divisez votre code en 2 Processus. Lancez le premier, puis lancez votre "long processus en cours", puis lancez le deuxième processus.

0
répondu EndangeredMassa 2008-09-18 18:11:26

exécutez votre processus à long terme au milieu de votre processus actuel et attendez qu'il soit terminé.

0
répondu EndangeredMassa 2008-09-18 18:12:04

je souhaite que vous pourriez il suffit d'ajouter le .net framework système.dll ou n'importe quoi à vos références de projet pour que vous puissiez juste faire ceci:

Dim ALongTime As Integer = 2000
System.Threading.Thread.Sleep(ALongTime)

...chaque fois. J'ai VB6, et VB.net 2008 sur ma machine, et c'est toujours difficile pour moi de basculer entre les IDE très différents.

0
répondu RetroDev 2017-07-04 22:19:55

System.Threading.Thread.Sleep(500)

-3
répondu twynham 2013-11-08 15:29:09