powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VB6: Приостановить выполнение кода приложения
25 сообщений из 45, страница 1 из 2
VB6: Приостановить выполнение кода приложения
    #37575006
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем, задачка архитектурного характера

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

Но возникает ситуация, когда требуется, чтобы вся прога приостановила свою работу, не выполнялся никакой код, до определенного момента. Я запускаю модальную форму, в этой форме работает цикл.
Так вот, если цикл без DoEvents, то комп тормозит, так как цикл зря грузит проц, да и окно самой программы не хочет перерисовываться при переключениях из другого приложения. А если поставить DoEvents, то будут отрабатываться события в приложении, а это как раз крайне нежелательно.

как бы так просто убить двух зайцев?
делать дополнительный контроль во всех событиях, которые могут произойти - достаточно проблематично.
...
Рейтинг: 0 / 0
VB6: Приостановить выполнение кода приложения
    #37575031
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sleep()
...
Рейтинг: 0 / 0
VB6: Приостановить выполнение кода приложения
    #37575038
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProНо возникает ситуация, когда требуется, чтобы вся прога приостановила свою работу, не выполнялся никакой код, до определенного момента. Я запускаю модальную форму, в этой форме работает цикл.Каков критерий окончания этой приостановки? что за определённый момент? критерий - наступление некоего события или действия пользователя (нажатие кнопки, например)?
...
Рейтинг: 0 / 0
VB6: Приостановить выполнение кода приложения
    #37575065
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ожидание восстановления связи с сервером ))
...
Рейтинг: 0 / 0
VB6: Приостановить выполнение кода приложения
    #37575101
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Оставить цикл с DoEvents, но добавить туда Sleep. Sleep приостановит прогу без загрузки проца, а DoEvent позволит иногда перерисовать окно. Хотя в этот момент пытливый юзер может успеть куда-нибудь ткнуть и сгенерить событие.
...
Рейтинг: 0 / 0
VB6: Приостановить выполнение кода приложения
    #37575118
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да блин, если разрешить doevents, то будут происходить события, которых быть не должно. И это необязательно пользовательские события.
...
Рейтинг: 0 / 0
VB6: Приостановить выполнение кода приложения
    #37575163
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

оставить DoEvents и блокировать нажатия мыши и клавы, на всякий пожарный давать фокус какому-нить левому окну) правда от программного ввода не спасёт... либо что-нить можно сообразить с msgbox'ом. вроде, можно было послать msgbox так, что прога работает, а ввод данных в прогу не осуществляется, пока не закрыт msg...
...
Рейтинг: 0 / 0
VB6: Приостановить выполнение кода приложения
    #37575173
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Shocker.Pro
> Да блин, если разрешить doevents, то будут происходить события, которых быть не должно. И это необязательно
> пользовательские события.

БегЁшь по всем открытым окнам и делаешь им Enabled = False, открываешь свое модальное окно в циклом и DoEvents'ом и
ждешь сигнала окончить перекур, прячешь модальное окно и пробегаешся по открытым окнам и делаешь им Enabled = True. И
овцы целы(задизейбленным окнам недоходят виндовые сообщения) и волки сыты(делается то что нужно)

Ы?

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
VB6: Приостановить выполнение кода приложения
    #37575216
Диклевич Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я в таком случае использую цикл с DoEvents, однако блокирую все контролы (Enabled = False) до выхода из цикла. Потом разблокирую.
...
Рейтинг: 0 / 0
VB6: Приостановить выполнение кода приложения
    #37575303
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BelowZero, Игорь Горбонос, Диклевич Александр

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

Но в программе происходят события, не связанные с пользовательскими действиями, вот их-то и не надо обслуживать.
...
Рейтинг: 0 / 0
VB6: Приостановить выполнение кода приложения
    #37575316
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тогда через глобальный флаг, который в своих событиях отслеживай
...
Рейтинг: 0 / 0
VB6: Приостановить выполнение кода приложения
    #37575321
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все вышеотписавшиеся проигнорировали этот момент:
И это необязательно пользовательские события.Это может быть событие какой-нибудь асинхронной библиотеки, с UI никак не связанной. XMLHTTP, например.

Shocker.ProДа блин, если разрешить doevents, то будут происходить события, которых быть не должно.Тогда Refresh вместо DoEvents. Refresh гораздо накладнее DoEvents, но можно минимизировать нагрузку на проц, поставив в Sleep промежуток побольше.
...
Рейтинг: 0 / 0
VB6: Приостановить выполнение кода приложения
    #37575346
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProОжидание восстановления связи с сервером ))Как именно определяется факт восстановления связи?
Если, к примеру, изменяется статус контрола в другой форме - то в соотв. методе можно сделать unload этой модальной формы...
...
Рейтинг: 0 / 0
VB6: Приостановить выполнение кода приложения
    #37575378
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_Oneтогда через глобальный флаг, который в своих событиях отслеживайкак я сказал в первом посте - это неудобно, так как обработчиков событий много разных
...
Рейтинг: 0 / 0
VB6: Приостановить выполнение кода приложения
    #37575381
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyShocker.ProДа блин, если разрешить doevents, то будут происходить события, которых быть не должно.Тогда Refresh вместо DoEvents. Refresh гораздо накладнее DoEvents, но можно минимизировать нагрузку на проц, поставив в Sleep промежуток побольше.Refresh чего?
...
Рейтинг: 0 / 0
VB6: Приостановить выполнение кода приложения
    #37575410
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,

Твой пример не решает мою проблему - стронние события будут выполняться (даже если MsgBox открыть ))
...
Рейтинг: 0 / 0
VB6: Приостановить выполнение кода приложения
    #37575424
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProТвой пример не решает мою проблему - стронние события будут выполнятьсяАх вот что тебе нужно... тут, я боюсь, без API-шного SuspendThread или чего-то аналогичного тебе не обойтись...
...
Рейтинг: 0 / 0
VB6: Приостановить выполнение кода приложения
    #37575453
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProRefresh чего?Модальной формы.
...
Рейтинг: 0 / 0
VB6: Приостановить выполнение кода приложения
    #37575520
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Antonariy
> Все вышеотписавшиеся проигнорировали этот момент:
> > И это необязательно пользовательские события.
> Это может быть событие какой-нибудь асинхронной библиотеки, с UI никак не связанной. XMLHTTP, например.

Тогда я бы ввел новую сущность - диспечер обработчиков в котором бы создавал объекты обработки и в случае необходимости
"переназначал" реальные объекты с переменной обработчика на другую объектную переменную которая объявленна без
WithEvent, а саму переменную-обработчик Nothing'ил.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
VB6: Приостановить выполнение кода приложения
    #37575530
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Игорь Горбонос
> ...WithEvent, а саму переменную-обработчик Nothing'ил.

А потом, при необходимости снова возвращал объект переменной-обработчику

P.S. Сори, у меня - руки крюки. Отправил раньше чем дописал :(

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
VB6: Приостановить выполнение кода приложения
    #37575536
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сам вопрос мне не очень внушает доверия. может что-то стоит пересмотреть в архитектуре самой программы. зачем какое-то модальное окно юзеру, почему не должны работать ассинхронные события неких объектов?
...
Рейтинг: 0 / 0
VB6: Приостановить выполнение кода приложения
    #37575874
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь Горбонос, Konst_One

Не до переделки архитектуры!
Слишком большой объем работы.
Фактически, пытаюсь создать заплатку.

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

Antonariy

sleep+refresh проблему не решил - окно приложения не обновляется, то есть если я куда-то переключусь, обратно в приложение вернуться не могу
...
Рейтинг: 0 / 0
VB6: Приостановить выполнение кода приложения
    #37575892
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда только второй поток. Основной спит и реконектится, второй развлекает пользователя формочкой "подождите/отмените".
...
Рейтинг: 0 / 0
VB6: Приостановить выполнение кода приложения
    #37575924
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyТогда только второй потокЯ сам не работал с CreateThread, примеров-то тут полно, вчера читал, но есть негативные отзывы в том числе твои (ща сходу не могу найти). Подойдет он для данной задачи?
...
Рейтинг: 0 / 0
VB6: Приостановить выполнение кода приложения
    #37576303
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Напрямую нет. Тебе нужно ознакомиться с этим постом, походить по ссылкам там опубликованным и вообще пообщаться с автором. Он является крупнейшим специалистом, не побоюсь этого слова, в мире (не работающим в MS), по внутренностям VB6.
...
Рейтинг: 0 / 0
25 сообщений из 45, страница 1 из 2
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VB6: Приостановить выполнение кода приложения
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]