|
|
|
VB6: Приостановить выполнение кода приложения
|
|||
|---|---|---|---|
|
#18+
В общем, задачка архитектурного характера Есть у меня прога, в нормальном режиме работы там открыта пользователем куча окон, с которыми он работает параллельно, программа не блокирует ему ничего, давая возможность переключаться между потребностями. Но возникает ситуация, когда требуется, чтобы вся прога приостановила свою работу, не выполнялся никакой код, до определенного момента. Я запускаю модальную форму, в этой форме работает цикл. Так вот, если цикл без DoEvents, то комп тормозит, так как цикл зря грузит проц, да и окно самой программы не хочет перерисовываться при переключениях из другого приложения. А если поставить DoEvents, то будут отрабатываться события в приложении, а это как раз крайне нежелательно. как бы так просто убить двух зайцев? делать дополнительный контроль во всех событиях, которые могут произойти - достаточно проблематично. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2011, 12:21 |
|
||
|
VB6: Приостановить выполнение кода приложения
|
|||
|---|---|---|---|
|
#18+
Sleep() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2011, 12:29 |
|
||
|
VB6: Приостановить выполнение кода приложения
|
|||
|---|---|---|---|
|
#18+
Shocker.ProНо возникает ситуация, когда требуется, чтобы вся прога приостановила свою работу, не выполнялся никакой код, до определенного момента. Я запускаю модальную форму, в этой форме работает цикл.Каков критерий окончания этой приостановки? что за определённый момент? критерий - наступление некоего события или действия пользователя (нажатие кнопки, например)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2011, 12:31 |
|
||
|
VB6: Приостановить выполнение кода приложения
|
|||
|---|---|---|---|
|
#18+
Ожидание восстановления связи с сервером )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2011, 12:40 |
|
||
|
VB6: Приостановить выполнение кода приложения
|
|||
|---|---|---|---|
|
#18+
Оставить цикл с DoEvents, но добавить туда Sleep. Sleep приостановит прогу без загрузки проца, а DoEvent позволит иногда перерисовать окно. Хотя в этот момент пытливый юзер может успеть куда-нибудь ткнуть и сгенерить событие. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2011, 12:50 |
|
||
|
VB6: Приостановить выполнение кода приложения
|
|||
|---|---|---|---|
|
#18+
Да блин, если разрешить doevents, то будут происходить события, которых быть не должно. И это необязательно пользовательские события. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2011, 12:55 |
|
||
|
VB6: Приостановить выполнение кода приложения
|
|||
|---|---|---|---|
|
#18+
Shocker.Pro, оставить DoEvents и блокировать нажатия мыши и клавы, на всякий пожарный давать фокус какому-нить левому окну) правда от программного ввода не спасёт... либо что-нить можно сообразить с msgbox'ом. вроде, можно было послать msgbox так, что прога работает, а ввод данных в прогу не осуществляется, пока не закрыт msg... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2011, 13:04 |
|
||
|
VB6: Приостановить выполнение кода приложения
|
|||
|---|---|---|---|
|
#18+
> Автор: Shocker.Pro > Да блин, если разрешить doevents, то будут происходить события, которых быть не должно. И это необязательно > пользовательские события. БегЁшь по всем открытым окнам и делаешь им Enabled = False, открываешь свое модальное окно в циклом и DoEvents'ом и ждешь сигнала окончить перекур, прячешь модальное окно и пробегаешся по открытым окнам и делаешь им Enabled = True. И овцы целы(задизейбленным окнам недоходят виндовые сообщения) и волки сыты(делается то что нужно) Ы? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2011, 13:08 |
|
||
|
VB6: Приостановить выполнение кода приложения
|
|||
|---|---|---|---|
|
#18+
я в таком случае использую цикл с DoEvents, однако блокирую все контролы (Enabled = False) до выхода из цикла. Потом разблокирую. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2011, 13:23 |
|
||
|
VB6: Приостановить выполнение кода приложения
|
|||
|---|---|---|---|
|
#18+
BelowZero, Игорь Горбонос, Диклевич Александр Ребята, вы все меня не услышали!!!! Пользователь и так ничего не может сделать, потому что форма модальная, запрещена к выгрузке и на ней нет контролов. Но в программе происходят события, не связанные с пользовательскими действиями, вот их-то и не надо обслуживать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2011, 13:55 |
|
||
|
VB6: Приостановить выполнение кода приложения
|
|||
|---|---|---|---|
|
#18+
тогда через глобальный флаг, который в своих событиях отслеживай ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2011, 13:59 |
|
||
|
VB6: Приостановить выполнение кода приложения
|
|||
|---|---|---|---|
|
#18+
Все вышеотписавшиеся проигнорировали этот момент: И это необязательно пользовательские события.Это может быть событие какой-нибудь асинхронной библиотеки, с UI никак не связанной. XMLHTTP, например. Shocker.ProДа блин, если разрешить doevents, то будут происходить события, которых быть не должно.Тогда Refresh вместо DoEvents. Refresh гораздо накладнее DoEvents, но можно минимизировать нагрузку на проц, поставив в Sleep промежуток побольше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2011, 14:01 |
|
||
|
VB6: Приостановить выполнение кода приложения
|
|||
|---|---|---|---|
|
#18+
Shocker.ProОжидание восстановления связи с сервером ))Как именно определяется факт восстановления связи? Если, к примеру, изменяется статус контрола в другой форме - то в соотв. методе можно сделать unload этой модальной формы... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2011, 14:09 |
|
||
|
VB6: Приостановить выполнение кода приложения
|
|||
|---|---|---|---|
|
#18+
Konst_Oneтогда через глобальный флаг, который в своих событиях отслеживайкак я сказал в первом посте - это неудобно, так как обработчиков событий много разных ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2011, 14:21 |
|
||
|
VB6: Приостановить выполнение кода приложения
|
|||
|---|---|---|---|
|
#18+
AntonariyShocker.ProДа блин, если разрешить doevents, то будут происходить события, которых быть не должно.Тогда Refresh вместо DoEvents. Refresh гораздо накладнее DoEvents, но можно минимизировать нагрузку на проц, поставив в Sleep промежуток побольше.Refresh чего? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2011, 14:22 |
|
||
|
VB6: Приостановить выполнение кода приложения
|
|||
|---|---|---|---|
|
#18+
Akina, Твой пример не решает мою проблему - стронние события будут выполняться (даже если MsgBox открыть )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2011, 14:30 |
|
||
|
VB6: Приостановить выполнение кода приложения
|
|||
|---|---|---|---|
|
#18+
Shocker.ProТвой пример не решает мою проблему - стронние события будут выполнятьсяАх вот что тебе нужно... тут, я боюсь, без API-шного SuspendThread или чего-то аналогичного тебе не обойтись... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2011, 14:36 |
|
||
|
VB6: Приостановить выполнение кода приложения
|
|||
|---|---|---|---|
|
#18+
Shocker.ProRefresh чего?Модальной формы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2011, 14:44 |
|
||
|
VB6: Приостановить выполнение кода приложения
|
|||
|---|---|---|---|
|
#18+
> Автор: Antonariy > Все вышеотписавшиеся проигнорировали этот момент: > > И это необязательно пользовательские события. > Это может быть событие какой-нибудь асинхронной библиотеки, с UI никак не связанной. XMLHTTP, например. Тогда я бы ввел новую сущность - диспечер обработчиков в котором бы создавал объекты обработки и в случае необходимости "переназначал" реальные объекты с переменной обработчика на другую объектную переменную которая объявленна без WithEvent, а саму переменную-обработчик Nothing'ил. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2011, 15:13 |
|
||
|
VB6: Приостановить выполнение кода приложения
|
|||
|---|---|---|---|
|
#18+
> Автор: Игорь Горбонос > ...WithEvent, а саму переменную-обработчик Nothing'ил. А потом, при необходимости снова возвращал объект переменной-обработчику P.S. Сори, у меня - руки крюки. Отправил раньше чем дописал :( Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2011, 15:17 |
|
||
|
VB6: Приостановить выполнение кода приложения
|
|||
|---|---|---|---|
|
#18+
сам вопрос мне не очень внушает доверия. может что-то стоит пересмотреть в архитектуре самой программы. зачем какое-то модальное окно юзеру, почему не должны работать ассинхронные события неких объектов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2011, 15:20 |
|
||
|
VB6: Приостановить выполнение кода приложения
|
|||
|---|---|---|---|
|
#18+
Игорь Горбонос, Konst_One Не до переделки архитектуры! Слишком большой объем работы. Фактически, пытаюсь создать заплатку. Порвалась связь с сервером - модальная форма занимается переконнектом. В это время могут срабатывать таймеры, события окончания асинхронных процессов и т.п. Так как они могут тоже обращаться к серверу, а мы и так занимаемся ожиданием связи, надо, чтобы события эти также подвисли в ожидании. Antonariy sleep+refresh проблему не решил - окно приложения не обновляется, то есть если я куда-то переключусь, обратно в приложение вернуться не могу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2011, 16:53 |
|
||
|
VB6: Приостановить выполнение кода приложения
|
|||
|---|---|---|---|
|
#18+
Тогда только второй поток. Основной спит и реконектится, второй развлекает пользователя формочкой "подождите/отмените". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2011, 16:59 |
|
||
|
VB6: Приостановить выполнение кода приложения
|
|||
|---|---|---|---|
|
#18+
AntonariyТогда только второй потокЯ сам не работал с CreateThread, примеров-то тут полно, вчера читал, но есть негативные отзывы в том числе твои (ща сходу не могу найти). Подойдет он для данной задачи? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2011, 17:09 |
|
||
|
VB6: Приостановить выполнение кода приложения
|
|||
|---|---|---|---|
|
#18+
Напрямую нет. Тебе нужно ознакомиться с этим постом, походить по ссылкам там опубликованным и вообще пообщаться с автором. Он является крупнейшим специалистом, не побоюсь этого слова, в мире (не работающим в MS), по внутренностям VB6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2011, 20:09 |
|
||
|
|

start [/forum/topic.php?fid=60&msg=37575006&tid=2158216]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
36ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
| others: | 244ms |
| total: | 381ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...