Vba задержка времени: Как использовать временную задержку после запуска макроса VBA в Excel?

Новинки IT-индустрии, обзоры и тесты компьютеров и комплектующих

  • ПК и комплектующие
    • Настольные ПК и моноблоки
    • Портативные ПК
    • Серверы
    • Материнские платы
    • Корпуса
    • Блоки питания
    • Оперативная память
    • Процессоры
    • Графические адаптеры
    • Жесткие диски и SSD
    • Оптические приводы и носители
    • Звуковые карты
    • ТВ-тюнеры
    • Контроллеры
    • Системы охлаждения ПК
    • Моддинг
    • Аксессуары для ноутбуков
  • Периферия
    • Принтеры, сканеры, МФУ
    • Мониторы и проекторы
    • Устройства ввода
    • Внешние накопители
    • Акустические системы, гарнитуры, наушники
    • ИБП
    • Веб-камеры
    • KVM-оборудование
  • Цифровой дом
    • Сетевые медиаплееры
    • HTPC и мини-компьютеры
    • ТВ и системы домашнего кинотеатра
    • Технология DLNA
    • Средства управления домашней техникой
  • Гаджеты
    • Планшеты
    • Смартфоны
    • Портативные накопители
    • Электронные ридеры
    • Портативные медиаплееры
    • GPS-навигаторы и трекеры
    • Носимые гаджеты
    • Автомобильные информационно-развлекательные системы
    • Зарядные устройства
    • Аксессуары для мобильных устройств
  • Фото и видео
    • Цифровые фотоаппараты и оптика
    • Видеокамеры
    • Фотоаксессуары
    • Обработка фотографий
    • Монтаж видео
  • Программы и утилиты
    • Операционные системы
    • Средства разработки
    • Офисные программы
    • Средства тестирования, мониторинга и диагностики
    • Полезные утилиты
    • Графические редакторы
    • Средства 3D-моделирования
  • Мир интернет
    • Веб-браузеры
    • Поисковые системы
    • Социальные сети
    • «Облачные» сервисы
    • Сервисы для обмена сообщениями и конференц-связи
    • Разработка веб-сайтов
    • Мобильный интернет
    • Полезные инструменты
  • Безопасность
    • Средства защиты от вредоносного ПО
    • Средства управления доступом
    • Защита данных
  • Сети и телекоммуникации
    • Проводные сети
    • Беспроводные сети
    • Сетевая инфраструктура
    • Сотовая связь
    • IP-телефония
    • NAS-накопители
    • Средства управления сетями
    • Средства удаленного доступа
  • Корпоративные решения
    • Системная интеграция
    • Проекты в области образования
    • Электронный документооборот
    • «Облачные» сервисы для бизнеса
    • Технологии виртуализации

Наш канал на Youtube

Архив изданий

1999123456789101112
2000123456789101112
2001123456789101112
2002123456789101112
2003123456789101112
2004123456789101112
2005123456789101112
2006123456789101112
2007123456789101112
2008123456789101112
2009123456789101112
2010123456789101112
2011123456789101112
2012123456789101112
2013123456789101112
  • О нас
  • Размещение рекламы
  • Контакты

Популярные статьи

Моноблок HP 205 G4 22 AiO — одно из лучших решений для офисной и удаленной работы

В настоящем обзоре мы рассмотрим модель моноблока от компании HP, которая является признанным лидером в производстве компьютеров как для домашнего использования, так и для офисов. Моноблок HP 205 G4 22 — модель нового семейства, которая построена на базе процессоров AMD последнего поколения и отличается неплохой производительностью вкупе с привлекательной ценой

Logitech G PRO X Superlight — легкая беспроводная мышь для профессиональных киберспортсменов

Швейцарская компания Logitech G представила беспроводную игровую мышь Logitech G PRO X Superlight. Новинка предназначена для профессиональных киберспортсменов, а слово Superlight в ее названии указывает на малый вес этой модели, который не превышает 63 г. Это почти на четверть меньше по сравнению с анонсированным пару лет тому назад манипулятором Logitech G PRO Wireless

Материнская плата для домашнего майнинга ASRock h210 Pro BTC+

Как показало недавнее исследование Кембриджского университета — количество людей, которые пользуются сегодня криптовалютами, приближается к размеру населения небольшой страны и это только начало, мир меняется. Поэтому компания ASRock разработала и выпустила в продажу весьма необычную материнскую плату — h210 PRO BTC+, которую мы и рассмотрим в этом обзоре

Верхняя панель клавиатуры Rapoo Ralemo Pre 5 Fabric Edition обтянута тканью

Компания Rapoo анонсировала в Китае беспроводную клавиатуру Ralemo Pre 5 Fabric Edition. Новинка выполнена в формате TKL (без секции цифровых клавиш) и привлекает внимание оригинальным дизайном. Одна из отличительных особенностей этой модели — верхняя панель, обтянутая тканью с меланжевым рисунком

Изогнутый экран монитора MSI Optix MAG301 CR2 обеспечит максимальное погружение в игру

Линейку компьютерных мониторов MSI пополнила модель Optix MAG301 CR2, адресованная любителям игр. Она оборудована ЖК-панелью типа VA со сверхширокоформатным (21:9) экраном изогнутой формы (радиус закругления — 1,5 м). Его размер — 29,5 дюйма по диагонали, разрешение — 2560×1080 пикселов

Комплект SilverStone MS12 позволяет превратить SSD типоразмера M.2 2280 в портативный накопитель

Каталог продукции компании SilverStone пополнил комплект MS12. Он позволяет создать портативный накопитель на базе стандартного SSD типоразмера M.2 2280 с интерфейсом PCI Express

SSD-накопители ADATA XPG Spectrix S20G сочетают производительность с эффектным дизайном

Компания ADATA Technology анонсировала твердотельные накопители серии XPG Spectrix S20G. Они предназначены для оснащения игровых ПК и, как утверждают их создатели, сочетают высокую производительность и эффектный внешний вид

Видеокарта ASUS GeForce RTX 3070 Turbo оснащена системой охлаждения с одним центробежным вентилятором

Линейку видеоадаптеров ASUS на базе графических процессоров NVIDIA пополнила модель GeForce RTX 3070 Turbo (заводской индекс TURBO-RTX3070-8G), предназначенная для оснащения игровых ПК. Одной из особенностей новинки является конструкция системы охлаждения

КомпьютерПресс использует

VBA Excel. Функция Timer (примеры)

Применение функции Timer в VBA Excel для приостановки выполнения приложений и определения времени работы процедур. Примеры использования.

1.
Описание функции Timer

2.
Примеры использования в VBA Excel

Описание функции Timer

Timer – это функция без аргументов, которая возвращает количество секунд, прошедших после полночи. Значение типа Single.

На сайте разработчика сказано, что в Windows функция Timer возвращает дробные части секунды. О порядке дробной части там информации нет. Попробуем выяснить это сами, запустив в редакторе VBA Excel подпрограмму со строкой

MsgBox «Timer = » & Timer

Исходя из результата, отображенного в информационном окне MsgBox, будем считать, что функция Timer возвращает сотые доли секунды. Во время экспериментов с процедурой Vremya из Примера 2 результат вычисления разницы между двумя значениями функции Timer достигал шести знаков после запятой, и один раз – семи.

Примеры использования в VBA Excel

Пример 1
Присвоение значения функции Timer переменной:

Dim x As Single

x = Timer

Пример 2
Код VBA Excel для приостановки приложений:

1

2

3

4

5

6

Dim Start As Single, Pause As Single

Start = Timer

Pause = 0. 5

Do While Timer < Start + Pause

   DoEvents

Loop

  • Start – переменная, в которую записывается первоначальное значение таймера.
  • Pause – время в секундах (до сотых значений), на которое следует приостановить программу.

Функция DoEvents во время выполнения цикла передает управление операционной системе для обработки других событий. По рекомендации разработчиков не следует использовать DoEvents в тех случаях, когда

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

Код для приостановки приложений можно использовать как отдельную подпрограмму, вставляя ее имя с указанием интервала в нужные места других процедур:

1

2

3

4

5

6

7

Sub StopSub(Pause As Single)

Dim Start As Single

Start = Timer

Do While Timer < Start + Pause

   DoEvents

Loop

End Sub

Проверяем работоспособность подпрограммы StopSub:

1

2

3

4

5

6

Sub Vremya()

Dim x As Single

x = Timer

Call StopSub (3)

MsgBox Timer — x

End Sub

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

Такой способ приостановки приложений можно использовать в VBA Excel при создании бегущей строки.

Пример 3
Функцию Timer можно использовать для замера времени работы процедуры. Мы ее уже использовали для определения времени выполнения подпрограммы StopSub:

1

2

3

4

5

6

Sub Vremya()

Dim x As Single

x = Timer

Call MySub

MsgBox Timer — x

End Sub

Замените MySub на имя вашей подпрограммы и запустите код в редакторе VBA Excel. Информационное окно MsgBox покажет время работы процедуры.


Содержание рубрики VBA Excel по тематическим разделам со ссылками на все статьи.

Приостановка или задержка VBA с помощью функции ожидания, сна или цикла

Вам может потребоваться какой-либо способ приостановки или задержки выполнения кода VBA, и вы можете сделать это с помощью двух функций, называемых ожиданием и ожиданием. Вы также можете сделать это с помощью цикла, и мы рассмотрим и этот подход, но сначала мы рассмотрим функции, доступные в Excel.

Зачем приостанавливать код? Возможно, вам нужно дождаться завершения другой задачи, например, если вы вызвали функцию API/оболочки Windows. Или вы можете подождать, пока пользователь обновит данные на листе, или вы просто хотите запустить макрос в заданное время.

Загрузите книгу с образцом кода VBA

Запросы в этом файле Excel можно копировать/вставлять в расширенный редактор Power BI Desktop, и они также будут работать там.

Введите свой адрес электронной почты ниже, чтобы загрузить книгу с данными и кодом из этого поста.

Отправляя свой адрес электронной почты, вы соглашаетесь с тем, что мы можем отправить вам наш информационный бюллетень Excel по электронной почте.

Application.Wait

Метод .Wait доступен в Excel как функция VBA, в отличие от Sleep (см. ниже). Вы можете использовать его, чтобы указать, что макрос приостановлен на определенный период времени.

В этом примере макрос приостанавливается примерно на 10 секунд:

Application.Wait(Сейчас + TimeValue("0:00:10"))
 

Или вы можете приостановить выполнение до определенного времени, например. это приостановит макрос до 11:00:

Приложение. Подождите "11:00:00"
 

Ожидание не принимает задержки менее 1 секунды.

Sleep

Sleep — это функция Windows API, то есть она не является частью VBA, а является частью операционной системы Windows. Но мы можем получить к нему доступ, используя специальный оператор объявления в нашем VBA.

Этот оператор объявления служит двум целям. Во-первых, он сообщает Excel, где найти функцию, во-вторых, позволяет нам использовать 32-битную версию функции в 32-битном Excel и 64-битную версию функции в 64-битном Excel.

Заявление Declare выглядит следующим образом:

#Если VBA7, то ' Excel 2010 или более поздней версии

    Публичное объявление PtrSafe Sub Sleep Lib "kernel32" (ByVal Milliseconds As LongPtr)

#Еще ' Excel 2007 или более ранней версии

    Публичное объявление PtrSafe Sub Sleep Lib «kernel32» (ByVal в миллисекундах)

#Конец, если
 

Примечание. Я тестировал этот код только в Excel 2010 и 2013.

Вы можете узнать больше об этом типе операторов Declare и 32-битном/64-битном Office на сайте Microsoft MSDN

Sleep позволяет нам приостановить макрос на X миллисекунд, что является лучшим разрешением, чем Wait, у которого минимальная задержка составляет 1 секунду. Итак, чтобы приостановить макрос на 5 секунд с помощью Sleep, мы пишем это

Сон 5000
 

Циклы

Большим недостатком использования функции ожидания или сна является то, что Excel блокирует вас до окончания периода ожидания/сна. Вы можете использовать CTRL + BREAK, чтобы прервать макрос, но Excel не будет принимать ввод с клавиатуры или мыши, пока он находится в режиме паузы с помощью функции «Ожидание» или «Сон».

События приостанавливаются, и все, что вы запланировали с помощью Application.OnTime, также откладывается до окончания паузы. Если вы не знали, что происходит, похоже, что Excel завис, пока действуют Sleep или Wait. Однако фоновые процессы, такие как печать и пересчет, продолжаются.

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

Цикл имеет дополнительное преимущество, поскольку пользователи Mac могут его использовать, в то время как Wait и Sleep недоступны на Mac.

Простой цикл будет выглядеть примерно так

Sub WasteTime (закончить до тех пор, пока)

    Dim NowTick As Long
    Dim EndTick As Long

    EndTick = GetTickCount + (Готово * 1000)
    
    Делать

        NowTick = GetTickCount
        DoEvents

    Цикл до NowTick >= EndTick

Конец сабвуфера
 

Мы пишем подпрограмму WasteTime, которая при вызове из другой подпрограммы или функции получает значение, которое представляет собой количество секунд, в течение которых мы хотим, чтобы она ничего не делала, например:

Отходы(10)
 

Ключевым здесь является метод DoEvents. DoEvents указывает Excel проверить, не хочет ли система сделать что-нибудь еще, например, принять ввод с клавиатуры или мыши. В этом примере мой макрос выполняется, но позволяет пользователю вводить данные на листе. Примерно через 10 секунд появится сообщение.

Функция GetTickCount — это еще одна функция Windows API, к которой мы обращаемся с помощью другого оператора Declare. Возвращает количество миллисекунд с момента запуска компьютера.

Параметр Finish , который мы передаем в подпрограмму WasteTime, представляет собой количество секунд, на которое мы хотим отложить выполнение кода. Чтобы преобразовать это в миллисекунды, мы умножаем Finish на 1000.

Разрешение таймера

В моих примерах я использовал слово приблизительно при описании задержек, которых я пытаюсь достичь. Говорю приблизительно, потому что реальная продолжительность паузы в выполнении кода зависит от разрешения таймера на вашем компьютере.

Я мог бы дать вам очень сложное описание, почему это так, или вы могли бы погуглить, но скажем так, если вы хотите что-то отложить на 10 секунд, то вы задержите это примерно на 10 секунд. Это будет всего на несколько миллисекунд, что совершенно нормально для того типа вещей, которые я делаю. Я бы просто не стал использовать его для определения времени Усэйна Болта.

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

Как сделать паузу на определенное время? (Excel/VBA)

Исходная информация и объяснение

Все приложения Microsoft Office выполняют код VBA в том же потоке, что и основной пользовательский интерфейс. Это означает, что пока код VBA не вызывает DoEvents , выполнение кода замораживает все приложение (оно будет отображаться как «не отвечающее» в диспетчере задач!). Сюда входят вызовы API-функции Sleep . После вызова Sleep невозможно выйти из этого состояния, не дожидаясь истечения времени или принудительно закрывая приложение и перезапуская его.

Приложение Application. Wait , специфичное для Excel, также страдает от этой проблемы, за исключением того, что в этом случае приложение не будет отображаться как , не отвечающее в диспетчере задач. Он по-прежнему будет так же не реагировать на пользователя.

Способ обойти эту проблему — вызвать DoEvents в цикле, как уже указывали другие люди. Однако это связано с другой проблемой. Поскольку приложение попытается выполнить код VBA как можно быстрее, DoEvents вызывается с максимально достижимой скоростью, по существу полностью загружая ЦП в этом единственном потоке, что приводит к высокому, ненужному использованию ЦП и энергии и потенциально замедляет другие более важные задачи в пользовательский интерфейс.

Вот почему лучший способ заставить VBA приостановить выполнение — это комбинация обоих методов, используя DoEvents , чтобы оставаться в ответе, и Sleep , чтобы избежать максимальной загрузки ЦП. Реализация этого представлена ​​ниже.


Универсальное решение

Следующий код реализует WaitSeconds Sub , который приостанавливает выполнение на заданное количество секунд, избегая при этом всех вышеупомянутых проблем.
Его можно использовать так:

 Sub UsageExample()
    Секунды ожидания 3.5
Конец сабвуфера
 

Это приостановит выполнение макроса на 3,5 секунды без зависания приложения и чрезмерной загрузки ЦП. Чтобы это работало, просто скопируйте следующий код в начало любого стандартного модуля кода.

 #Если Mac, то
    #Если VBA7, то
        Частное объявление PtrSafe Sub USleep Lib "/usr/lib/libc.dylib" Псевдоним "usleep" (ByVal dwMicroseconds As Long)
    #Еще
        Private Declare Sub USleep Lib "/usr/lib/libc.dylib" Псевдоним "usleep" (ByVal dwMicroseconds As Long)
    #Конец, если
#Еще 'Windows
    #Если VBA7, то
        Публичное объявление PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    #Еще
        Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    #Конец, если
#Конец, если
#Если Mac, то
'Sub, предоставляющий Sleep API, совместимый с Windows на Mac (аргумент в мс)
'Авторы: Кристиан Бузе, https://stackoverflow. com/a/71176040/12287457
' Гвидо Витт-Дёрринг, https://stackoverflow.com/a/74262120/12287457
Public Sub Sleep (ByVal dwMilliseconds As Long)
    Делать пока dwMilliseconds и &H80000000
        Спящий режим &HFFFFFED8
        Если dwMilliseconds < (&h518937 Или &H80000000) Тогда
            dwMilliseconds = &H7FBE76C9 + (dwMilliseconds - &H80000000)
        Еще
            dwMilliseconds = dwMilliseconds - &h518937
        Конец, если
    Петля
    Делать, пока dwMilliseconds > &h518937
        USleep &HFFFFFED8: dwMilliseconds = dwMilliseconds - &h518937
    Петля
    Если dwMilliseconds > &h30C49B Тогда
        USleep (dwMilliseconds * 500& или &H80000000) * 2&
    Еще
        USleep dwMilliseconds * 1000&
    Конец, если
Конец сабвуфера
#Конец, если
'Вспомогательная приостановка выполнения кода без зависания приложения или высокой загрузки ЦП
'Автор: Гвидо Витт-Дёрринг, https://stackoverflow.com/a/74387976/12287457
Public Sub WaitSeconds (ByVal секунды как одиночные)
    Dim currTime As Single, endTime As Single, cacheTime As Single
    currTime = Timer(): endTime = currTime + секунды: cacheTime = currTime
    Делать пока currTime < endTime
        Сон 15: DoEvents: currTime = Timer()
        'Следующее необходимо, потому что функция Timer() сбрасывается в 00:00
        Если currTime < cacheTime, тогда endTime = endTime — 86400! 'секунд в день
        cacheTime = текущее время
    Петля
Конец сабвуфера
 

[1] Дополнительную информацию о кроссплатформенном Sleep , включенном в приведенный выше код, можно найти здесь и здесь.

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

 'Замораживает ли приложение
Подпример использования ()
    Сон 3,5*1000
Конец сабвуфера
 

Важные примечания:

  1. Если вы хотите использовать этот код внутри модуля класса и не хотите объявлять подпрограмму Sleep в дополнительном стандартном модуле, вы можете использовать приведенный выше код, но вы необходимо изменить объявление для всех подпрограмм Sleep на Private , потому что невозможно импортировать функции API как Public внутри модуля класса.

  2. Точность времени Timer() 9Функция 0088, используемая в этом решении, лучше подходит для Windows, однако утверждение в документации о том, что разрешение на Mac составляет одну секунду, неверно. Даже на Mac разрешение лучше 0,1 секунды. Тем не менее, не стоит ожидать от этого решения разрешения намного лучше, чем ~ 0,1 секунд! WaitSeconds 1 будет ждать около 1,015 ± 0,02 секунд в Windows.

  3. Если вы планируете использовать это, чтобы приостановить свой код на длительные периоды времени, или даже в случае, с которым имеет дело OP, вы, скорее всего, используете неправильный инструмент для работы. Если вы используете Excel, рассмотрите возможность изучения Заявка.OnTime . (См. следующий раздел)


Альтернативы приостановке выполнения VBA и лучшее решение для OP

Вопрос, заданный оператором, не приводит к лучшему решению его проблемы. Это проблема XY.

На самом деле нет необходимости, чтобы код VBA работал без остановок в фоновом режиме, чтобы пересчитывать рабочую книгу каждую секунду. Это типичный пример задачи, которую также можно решить с помощью Application. OnTime 9.0088 .

Подробное руководство, включающее способ копирования и вставки для пересчета любого диапазона в любой желаемый интервал времени ≥ 1 с , доступно здесь.

Большим преимуществом использования Application.OnTime для этого является то, что он позволяет избежать непрерывно выполняющегося макроса и, следовательно, позволяет использовать другие макросы или другие функции, недоступные во время выполнения макросов.


Мета-анализ всех других решений в этой теме

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

  1. Они полностью замораживают вызывающее приложение, из-за чего оно больше не отвечает на ввод данных пользователем, или
  2. Они вызывают чрезмерное использование ЦП (100 % в потоке вызывающего приложения), вызывая DoEvents в цикле.

Кроме того, многие из предлагаемых решений имеют другие проблемы:

  1. Некоторые работают только в Windows

  2. Некоторые работают только в Excel

  3. Некоторые из них имеют внутреннюю погрешность более одной секунды

  4. У некоторых есть другие проблемы или даже ошибки

В следующей таблице представлен краткий обзор всех решений в этой теме и их характеристик

Условные обозначения

Столбец ✅ (Хорошо) ❌ (Плохо)
Приложение отвечает Приложение остается отзывчивым и удобным для использования Полностью зависает вызывающее приложение
Использование ЦП ЦП практически не используется 100% использование ЦП в одном потоке выполнения
Кросс-приложение Работает вне Excel Работает только в Excel
Win/Mac Работает как на Windows, так и на Mac Работает только на Windows
Точный Точность времени < 0,1 секунды Точность времени > 0,1 секунды (обычно около 1 секунды)
Прочие вопросы Нет других проблем Имеет некоторые другие проблемы, описанные в таблице ниже

Обзор

Другие проблемы

Решение от Прочие вопросы
киберпанк Это решение будет бездействовать на неопределенный срок, если во время вызова Timer() + vSeconds > 172800 ( vSevonds — это входное значение). На практике это не должно быть большой проблемой, потому что Timer() всегда ≤ 86400, поэтому входное значение должно быть больше 86400, что соответствует одному дню. В любом случае такие функции обычно не должны вызываться так долго.
Реверус Это решение вообще не позволяет делать паузу на определенное время! Вы просто указываете, как часто вы хотите вызывать DoEvents , прежде чем продолжить. Как долго это будет зависеть от скорости вашей системы. На моем ПК вызов функции с максимальным значением Long может занять (2147483647) (таким образом, максимальное время, в течение которого функция может приостанавливаться), будет приостановлено примерно на 1434 секунды или примерно на 24 минуты. Очевидно, это ужасное «решение».
Брайан Бернс Это решение будет бездействовать на неопределенный срок, если во время вызова Timer() + sngSecs > 86400 ( sngSecs — это входное значение). Поскольку Timer() может возвращать значения до 86400, вызов этой функции непосредственно перед полуночью может вызвать эту ошибку даже при очень малых входных значениях. Это серьезная ошибка, и ее следует учитывать!
г т Это решение вообще не ждет. Если вы рассмотрите его обобщение, Application.Wait Second(Now) + dblInput , он вообще не будет ждать входных значений меньше CDbl(Now) - 60# / 86400# , что на момент написания 44815 это и для входных значений, превышающих это, он будет ждать dblInput - CDbl(Now) - Second(Now) / 86400# дней. Хотя можно сконструировать входные значения, которые заставят ждать разумное время, это очень сложно. Ужасное "решение".
ИТИ В комментарии эта функция описывается как способная вызывать задержки до 99 секунд. Это неправильно, потому что входные значения, где T Mod 100 > 60 ( T — входной параметр), вызовут ошибку и, следовательно, остановят выполнение на неопределенный срок, если ошибка не будет обработана вызывающим кодом.

Imacros | Все права защищены © 2021