Как я задерживаю выполнение кода в Visual Basic (VB6)?

Это скорее ответ на python, чем ответ Flask / werkzeug; но это просто и работает.

Если, как и я, вы хотите, чтобы настройки вашего приложения (загруженные из файла .ini) также содержали префикс вашего приложения Flask (таким образом, чтобы не устанавливать значение во время развертывания, но во время выполнения) вы можете выбрать следующее:

def prefix_route(route_function, prefix='', mask='{0}{1}'):
  '''
    Defines a new route function with a prefix.
    The mask argument is a `format string` formatted with, in that order:
      prefix, route
  '''
  def newroute(route, *args, **kwargs):
    '''New function to prefix the route'''
    return route_function(mask.format(prefix, route), *args, **kwargs)
  return newroute

Возможно, это несколько хакерское и полагается на то, что функция маршрута колбы требует a route в качестве первого позиционного аргумента.

Вы можете использовать его следующим образом:

app = Flask(__name__)
app.route = prefix_route(app.route, '/your_prefix')

NB: ничего не стоит, что можно использовать переменную в префиксе (например, установив его на /<prefix>), а затем обработайте этот префикс в тех функциях, которые вы украшаете своим @app.route(...). Если вы это сделаете, вам, очевидно, нужно объявить параметр prefix в вашей украшенной функции. Кроме того, вы можете проверить представленный префикс на некоторые правила и вернуть 404, если проверка завершилась неудачно. Чтобы избежать 404 пользовательской повторной реализации, пожалуйста, from werkzeug.exceptions import NotFound, а затем raise NotFound(), если проверка завершилась неудачно.

11
задан Ray Vega 9 March 2018 в 20:13
поделиться

5 ответов

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
12
ответ дан 3 December 2019 в 03:37
поделиться

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

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, и т.д.).

16
ответ дан 3 December 2019 в 03:37
поделиться

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

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

2
ответ дан 3 December 2019 в 03:37
поделиться

Взломайте свой код в 2 процесса. Выполните первое, затем выполните свой "длительный процесс", затем выполните второй процесс.

0
ответ дан 3 December 2019 в 03:37
поделиться

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

0
ответ дан 3 December 2019 в 03:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: