Как Оживить Зависшее Окно?

  • Автор темы motogarri
  • Дата начала
M

motogarri

Здравствуйте.
Была похожая тема https://codeby.net/threads/12447.html?hl...%E3%F0%E5%F1%F1 , но там решение, как я понял так и не было найдено.

В клиенте R5 работает долгий цикл по поиску и обработке документов. Пишу прогресс в статус-бар и в NEMProgressBar. Где-то на половине цикла окно лотуса виснет и до окончания не отвечает. Прогресс не пишется ни в статус-бар ни в прогресс-бар.
Пробовал ставить Sleep, Yield - не помогает, хотя как понял Слип должен был и помочь.
Пробовал WinApi; InvalidateRect, UpdateWindow. Тоже никакого эффекта.

Подскажите, как решить проблему.
 

savl

Lotus Team
28.10.2011
2 624
314
BIT
543
Вот это артефакт... И меня еще называют консерватором... -_-

Прогресс не пишется ни в статус-бар ни в прогресс-бар.
Есть предположение, что либо не обновляется счетчик (какой-нибудь переход), либо зацикливается.
Результат выдается или "мертвый клиент"?
По коду верно все там?

P.S. Может клиент все же обновить до 7ки (хотя бы) и переделать поиск?
 
M

motogarri

Не, не зацикливается, нормально отрабатывает и выдает результат. Но на время работы зависает намертво. Даже статус-бар. Обновиться пока не светит ((
На Р5 даже во время репликации, когда в основном потоке идет, так же окно виснет, но там понятно ничего не поделаешь. А тут в цикле какую-нибудь команду бы вставить. Вот только знать бы какую.
 

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
может в реестре винды поискать таймаут для программ, которые она(винда) считает зависшими
типа время ожидания или как-то там
 

rinsk

Lotus Team
12.11.2009
1 156
126
BIT
47
Не, не зацикливается, нормально отрабатывает и выдает результат. Но на время работы зависает намертво. Даже статус-бар. Обновиться пока не светит ((
На Р5 даже во время репликации, когда в основном потоке идет, так же окно виснет, но там понятно ничего не поделаешь. А тут в цикле какую-нибудь команду бы вставить. Вот только знать бы какую.
Эт у него в ДНК так - пока идет работа агента на клиенте - оно замирает.
Лучше всего поставить 6.х - там агентов можно запускать в фоновом режиме на клиенте...
 
M

motogarri

Ну, видимо придётся смириться пока.
ToxaRat, я не понял что имеешь ввиду, но покопаю, может и найду что.
 

savl

Lotus Team
28.10.2011
2 624
314
BIT
543
garri
Тоха предлагает выставить в Windows тайм-аут на зависшие приложения.
Типа, если висит 500 мс -> принудительно закрывать.
Вот только я не уверен что progress bar будет стартовать как отдельное приложение, как отдельный поток скорее всего.
Следовательно это может не помочь.

У пользователей Windows XP есть счастливая возможность установить время, по истечении которого в операционной системе программу следует считать зависшей. Для этого зайдите по адресу HKEY_CURRENT_USER\Control Panel\Desktop и установите время ключа ”HungAppTimeout” вручную (в миллисекундах). Обычно по умолчанию здесь установлен параметр в 5000 миллисекунд.
 
M

motogarri

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

savl

Lotus Team
28.10.2011
2 624
314
BIT
543
garri
Я бы отказался от него и заменил либо на простой текст в StatusBar, либо заменил на JavaProgressBar
Для LN 5.0 to 5.0.13a : JRE/JDK 1.1.8
Так что теоретически из этой базы может подойти:
 
M

motogarri

Статус-бар так же висит. Спасибо за советы, посмотрю.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!