Как отложить выполнение кода в Visual Basic (VB6)? - PullRequest
10 голосов
/ 18 сентября 2008

У меня есть длительный процесс в VB6, который я хочу завершить перед выполнением следующей строки кода. Как я могу это сделать? Встроенная функция? Могу ли я контролировать, как долго ждать?

Тривиальный пример:

Call ExternalLongRunningProcess
Call DoOtherStuff

Как мне отложить 'DoOtherStuff'?

Ответы [ 7 ]

16 голосов
/ 19 сентября 2008

Хотя ответ Nescio (DoEvents) будет работать, это заставит ваше приложение использовать 100% одного процессора. Сон сделает пользовательский интерфейс безразличным. Вам нужна комбинация из двух, и волшебная комбинация, которая, кажется, работает лучше всего:

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

While IsStillWaitingForSomething()
    DoEvents
    DoEvents
    Sleep(55)
Wend

Почему два DoEvents и один спят в течение 55 миллисекунд? Спящий режим в 55 миллисекунд является наименьшим срезом, который может обрабатывать VB6, и использование двух DoEvents иногда требуется в случаях, когда требуется супер-отзывчивость (не API, но если ваше приложение отвечает на внешние события, SendMessage, Interupts и т. Д. ).

12 голосов
/ 18 сентября 2008

VB.Net: я бы использовал WaitOne дескриптор события.

VB 6.0: я видел цикл DoEvents.

Do
     If isSomeCheckCondition() Then Exit Do
     DoEvents
Loop

Наконец, ты можешь просто поспать:

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

Sleep 10000
2 голосов
/ 18 сентября 2008

Как определить, когда завершился процесс Shelled:

Если вы вызываете внешний процесс, то вы фактически вызываете его асинхронно. Обратитесь к вышеуказанному документу службы поддержки MS, чтобы узнать, как дождаться завершения внешнего процесса.

0 голосов
/ 05 июля 2017

Хотелось бы, чтобы вы просто добавили .net framework system.dll или что-то еще к ссылкам вашего проекта, чтобы вы могли просто сделать это:

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

... каждый раз. У меня есть VB6 и VB.net 2008 на моей машине, и мне всегда трудно переключаться между разными IDE.

0 голосов
/ 08 ноября 2013

System.Threading.Thread.Sleep(500)

0 голосов
/ 18 сентября 2008

Запустите длительный процесс в середине текущего процесса и дождитесь его завершения.

0 голосов
/ 18 сентября 2008

Разбейте ваш код на 2 процесса. Запустите первый, затем запустите «длительный процесс», затем запустите второй процесс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...