Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник
Коллекция курьезных вопросов из форумов
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »

Вопрос по (not responding) в Windows 10


Тимохов ©   (09.07.19 14:13

Коллеги, приветствую!

1. Рад, что форму жив. Спасибо Kerk навел!

2. Столкнулся тут с проблемой небольшой.

Ситуация:
  а. Есть алгоритм, которые работает 10 сек.
  б. И конечно в главном потоке)))
  в. Windows 10 через 3 сек. решает, что приложение зависло и добавляет в шапку "(не отвечает)".
  г. Моя программа доделывает алгоритм и выводит сообщение - это моя форма (не штатный MessageDlg), выводимая через ShowModal.
  д. Иногда (и непонятно, почему) диалоговая форма из п. г) форма выводится на заднем плане.

В ходе разбирательств пришел к выводу, что вызов Application.ProcessMessages перед ShowModal решает проблему.

Понимаю, что "я пишу как-то не так, надо расчеты делать в отдельном потоке" и "delphi 2007 - это старье", но все же задам вопрос:

Кто-то сталкивался с подобным уходом на задний план диалоговых окон?


Kerk ©   (09.07.19 14:41[1]

Parent/Owner у формы правильно выставляешь?


Тимохов ©   (09.07.19 14:52[2]

Application.

Вообще, эта моя форма - еще взятая давно-давно штатная форма MessageDlg.
Сильно дописанная. Но все же это обычный диалог с Application в качестве Owner.


Kerk ©   (09.07.19 15:32[3]

Я бы попробовал сделать овнером форму поверх которой нужно быть


Тимохов ©   (09.07.19 17:54[4]

Можно вообще кувалдой в лоб: DisableProcessWindowsGhosting
Но это слишком...


Германн ©   (10.07.19 02:29[5]

Не раз сталкивался, но не понял алгоритма проблемы.
Но в данном варианте смущает меня парент Application. Это же в Дельфи исторически "невидимое" окно.


KSergey ©   (10.07.19 07:33[6]

Parent у формы? вы о чем?

> пришел к выводу, что вызов Application.ProcessMessages перед ShowModal решает проблему.

Ну и делать оставить там ProcessMessages. И перейти к другим более насущным задачам.


Тимохов ©   (10.07.19 11:06[7]


> KSergey ©   (10.07.19 07:33) [6]
> Ну и делать оставить там ProcessMessages. И перейти к другим
> более насущным задачам.


Так и сделал, Кэп))

Все же интересно было изучить тему Ghost-окон. Как-то раньше не сталкивался. Я раньше не понимал, что значит это "(не отвечает)" в шапке. И почему точно висящая моя программа хоть как-то реагирует - можно минимизировать, двигать, можно на нее перейти через ALT+TAB. Теперь знаю - windows переводит не отвечающую программу (кто не обращается к очереди сообщений больше 5 сек) в режим Ghost.

По теме (а я работать пошел):

https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-ishungappwindow

https://superuser.com/questions/961843/how-does-windows-know-if-a-program-is-not-responding

https://stackoverflow.com/questions/12633161/is-there-a-way-to-turn-the-windows-ghosting-feature-back-on-after-disableprocess


версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо