double arrow

Шаг 40 - О многозадачности Windows и циклах


Как Вы знаете Windows 9x является многозадачной средой. Это везде пишется. Но на самом деле это далеко не совсем так. То есть в ней нет четкой установки приоритетов. Не верите ? Создайте макрос в Excel и запустите вот этот пример.

Sub Test()

For x = 1 To 1000000000000

Debug.Print x

Next x

End Sub

Любая работа в этот момент будет проблематична. Это связанно с проблемами еще от Windows 3.1, тогда при программировании от Вас требовали периодически особенно в процессе длительных циклов передавать управление операционной системе. VBA до сих пор не избавлен от этой проблемы. Вам все равно надо это делать. Делается это с помошью DoEvents.

Используйте функцию DoEvents для передачи управления операционной системе каждый раз прохода цикла. Но она может быть полезна и при дисковых операциях ввода вывода, операциях с DDE. Давайте изменим наш пример.

Sub Test()

For x = 1 To 1000000000000

DoEvents

Debug.Print x

Next x

End Sub

Если Ваша программа тормозит выполнение других программ вспомните об этом шаге.


Сейчас читают про: