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

motogarri

Well-known member
17.02.2010
200
3
#1
Здравствуйте.
Была похожая тема http://codeby.net/forum/threads/12447.html?hl...%E3%F0%E5%F1%F1 , но там решение, как я понял так и не было найдено.

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

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

savl

Lotus team
28.10.2011
2 136
105
#2
Вот это артефакт... И меня еще называют консерватором... -_-

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

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

motogarri

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

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 231
18
#4
может в реестре винды поискать таймаут для программ, которые она(винда) считает зависшими
типа время ожидания или как-то там
 

rinsk

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

motogarri

Well-known member
17.02.2010
200
3
#6
Ну, видимо придётся смириться пока.
ToxaRat, я не понял что имеешь ввиду, но покопаю, может и найду что.
 

savl

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

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

motogarri

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