powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Параметр реестра HungAppTimeout
78 сообщений из 78, показаны все 4 страниц
Параметр реестра HungAppTimeout
    #39814282
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На этом форуме параметр реестра HungAppTimeout ещё не обсуждался, хотя странно, это довольно важный параметр, благодаря которому можно повысить надежность ПО, которое многие из нас разрабатывают для коммерческого использования.
В нашем ПО есть следующая проблема: при запуске программы в основном потоке загружаются десятки DLL-библиотек, зачастую время их загрузки превышает 5 секунд. Это время зависит прежде всего от того, чем занят HDD (с SSD такой проблемы нет). Если HDD ничем не загружен, то библиотеки грузятся быстро (в 5 секунд вполне укладываются), но если HDD нагружен другими задачами, то DLL могут грузиться дольше в разы.
В том случае, если на экране открылось окно, а затем основной поток не успел выполнить свои задачи за 5 секунд, Windows вешает дополнительное окно с надписью "не отвечает". После того, как подвисание заканчивается, Windows убирает своё окно. Такие манипуляции с окнами в нашем случае приводят к тому, что иногда окно, с которым взаимодействует пользователь, улетает на задний план (не важно, в каком режиме оно было открыто: Show или ShowModal). В отдельный случаях пользователи даже умудряются закрыть окно, поверх которого открыто модальное окно, уехавшее на задний план (это может приводить к Access Violation). В случае терминала самообслуживания получается такой эффект: пользователь (водитель) видит служебное окно, а не то окно, которое рисуется для него.

Лично я считаю, что таймаут в 5 секунд является слишком маленьким и допустимым только на компьютере разработчика. Вреда от такого преждевременного детектирования и манипуляции окнами гораздо больше, чем пользы. Думаю, нормальное значение должно быть не менее 20 секунд.

Параметр HungAppTimeout содержит количество миллисекунд, является текстовым и живёт в разделе "HKEY_CURRENT_USER\Control Panel\Desktop". Применяется после перелогина. Работает по всех версиях Windows (проверял я его на 32-разрядных версиях).
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39814333
asutp2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSer,

а почему бы не поменять логику при загрузке dll-ок? перед загрузкой отображаешь splash form (закрытие окна блокируешь), потом грузишь по одной dll и после загрузки каждой делаешь application.processmessages. Можно еще progressbar со статусом загрузки обновлять, чтобы юзер видел, что ничего не зависло. После загрузки всех библиотек это splash form уничтожаешь и приложение работает в обычном режиме.

И не надо HungAppTimeout лишний раз трогать, ибо он не всегда доступен для изменения
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39814337
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSerНа этом форуме параметр реестра HungAppTimeout ещё не обсуждался, хотя странно, это довольно важный параметр, благодаря которому можно повысить надежность ПО
..... если не лезть трогать его грязными руками.

DmSerВ нашем ПО есть следующая проблема:
По описанию я вижу минимум три проблемы:

1. Инициализация приложения надолго грузит основной поток
2. Создаваемые окна получают неправильные настройки в результате чего возможно нарушение видимого порядка и следующие из этого артефакты поведения
3. Недостаточно квалифицированные разработчики предпочитают решать проблему методом "кувалдой в лоб" вместо того, чтобы подумать.
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39814338
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приму к сведению, спасибо!
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39814339
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если не лезть трогать его грязными руками.
Поставил его 10000. Это решило проблему. Думаю, лучше сделать 20000. Наше ПО зависает крайне редко, но небольшие подвисания возможны.

Вам известно, к каким проблемам это может привести?
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39814342
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор
3. Недостаточно квалифицированные разработчики предпочитают решать проблему методом "кувалдой в лоб" вместо того, чтобы подумать.



Существует масса куда более важных вещей, о которых стоит подумать.
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39814343
asviridenkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSer,

delayed загрузку DLL не предлагать?
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39814365
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asviridenkovDmSer,

delayed загрузку DLL не предлагать?

Ваше дело предложить, наше ...
Приму к сведению!
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39814482
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если DLL тяжелая, она и одна может хорошо так загрузить. По-хорошему, надо максимально облегчать DLLMain, выносить тяжелые действия в отдельную Init. Правда, придется во все остальные функции добавлять проверку флага - был вызван Init или нет.
Либо грузить в отдельном потоке. Возможны подводные камни в зависимости от внутренностей DLL. Например, она может заводить свои глобальные переменные в TLS, тогда уже в главный поток не передашь.
Тут еще надо понять, каким образом приложение должно "ответить". Вызов GetMessage?
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39814507
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2Если DLL тяжелая, она и одна может хорошо так загрузить.
Значит, если она действительно нужна такая тяжёлая, нужно внутрь неё вставить ProcessMessages.

Василий 2По-хорошему, надо максимально облегчать DLLMain, выносить тяжелые действия в отдельную Init. Правда, придется во все остальные функции добавлять проверку флага - был вызван Init или нет.
По-хорошему, такое надо просто выносить в ленивую инициализацию.
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39814559
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
1. Инициализация приложения надолго грузит основной поток
2. Создаваемые окна получают неправильные настройки в результате чего возможно нарушение видимого порядка и следующие из этого артефакты поведения
3. Недостаточно квалифицированные разработчики предпочитают решать проблему методом "кувалдой в лоб" вместо того, чтобы подумать.

Отвечу ещё раз по пунктам.

1. Инициализация действительно надолго грузит основной поток. Это происходит, если программа находится в автозагрузке и используется HDD. В этом случае помимо нашего ПО параллельно грузится ещё масса других программ, что создаёт большую нагрузку на HDD. Плюс ещё и наше ПО при загрузке много чего пишет на диск.
2. Создаются VCL-окна с параметрами "по умолчанию". Никакими левыми настройками не увлекаемся.
3. Стараемся со своей стороны делать всё возможное, чтобы в основном потоке не выполнялось тяжёлых операций. Но работа с мелкими файлами и мелкие запросы к БД в основном потоке - в большом количестве, думаю, как и у всех Delphi-программистов. У программистов C# в этом случае преимущество, т.к. можно использовать механизм async/await.
4. Речь в этой ветке должна идти не об нашей программе. Если бы я горел желанием её обсуждать, то завёл бы другую ветку.
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39814565
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSer,

автор Инициализация действительно надолго грузит основной поток.
Может быть имеет смысл сделать инициализацию в доп потоке? пусть бы основной сообщениями занимался, как положено, проблем меньше будет.
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39814579
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaonDmSer,

автор Инициализация действительно надолго грузит основной поток.
Может быть имеет смысл сделать инициализацию в доп потоке? пусть бы основной сообщениями занимался, как положено, проблем меньше будет.

Конечно, так было бы лучше, не спорю!
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39814594
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSerИнициализация действительно надолго грузит основной поток.
Значит, стоит подумать, что здесь можно смягчить. Например, так ли нужно синхронно писать "много чего" при загрузке или пойдёт асинхронная запись. Итп.

DmSer2. Создаются VCL-окна с параметрами "по умолчанию". Никакими левыми настройками не увлекаемся.
Не во всех версиях дельфы это хороший вариант. Иногда стоит поиграть PopupMode/PopupParent для того, чтобы добиться адекватного поведения форм.

DmSer3. Стараемся со своей стороны делать всё возможное, чтобы в основном потоке не выполнялось тяжёлых операций. Но работа с мелкими файлами и мелкие запросы к БД в основном потоке - в большом количестве
И они все прямо так необходимы именно при инициализации?

DmSer4. Речь в этой ветке должна идти не об нашей программе.
Грубые люди реагируют на такие реплики в духе "Командовать будешь своей женой".
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39814632
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все зависит от того, насколько возможно модифицировать эти самые DLL. Если они полностью под контролем, то можно кучу всего придумать - и заточить под фоновый поток, и добавить коллбэки, и даже внутрях запускать в фоне.
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39814635
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2Все зависит от того, насколько возможно модифицировать эти самые DLL
Для внешних DLL можно написать прокладку, находящуюся полностью под контролем.
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39814752
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Грубые люди реагируют на такие реплики в духе "Командовать будешь своей женой"

Слава богу на этом форуме есть культурный человек, на которого всем нужно равняться =)
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39814759
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerВасилий 2Все зависит от того, насколько возможно модифицировать эти самые DLL
Для внешних DLL можно написать прокладку, находящуюся полностью под контролем.
Можно, но не всегда от этого будет польза. Если DLL, к примеру, размещает свои внутренние переменные в TLS текущего потока - хоть обпрокладывайся, но передать либу после иниц-ии в главный поток будет затруднительно. Везде надо смотреть по ситуации. А ТС-а, по-моему, и так все устраивает)))
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39823405
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот что ещё удалось выяснить:
если создавать модальную форму таким образом: TMyForm.Create(nil), то при зависании (Sleep(20000)) после того как на ней появится "Не отвечает" можно будет щелкнуть на низлежащей форме и она окажется на переднем плане. Когда зависание кончится, модальное окно остаётся снизу.

Если же в конструктор передавать ссылку на форму, из которой открывается модальная форма, то вся цепочка модальных форм корректно восстанавливается после окончания зависания.
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39823552
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSerКогда зависание кончится, модальное окно остаётся снизу.Alt+Tab ее поднимет
DmSerЕсли же в конструктор передавать ссылку на форму, из которой открывается модальная форма,Достаточно передать Application
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39823941
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_DmSerКогда зависание кончится, модальное окно остаётся снизу.Alt+Tab ее поднимет
DmSerЕсли же в конструктор передавать ссылку на форму, из которой открывается модальная форма,Достаточно передать Application

Мой тест показал, что передавать Application недостаточно. Глючит при этом реже, чем с nil. Но если передавать ссылку на форму, из которой выполняется вызов ShowModal, то сбоев вообще не возникает.
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39835496
Dimitry Timokhov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветствую!
Спасибо за тему!

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

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

В ходе тестов 1 раз на 10-20 раз мне удается получить уход на второй план диалоговой формы.
Если перед ShowModal вызывать Application.ProcessMessages, то не удалось получить проблему ни разу.

Понимаю, что это "кувалдой в лоб", но вроде работает.
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39835568
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Timokhovдиалоговая форма из п. г) выводится на заднем плане. DisableProcessWindowsGhosting
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39835616
Dimitry Timokhov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_Dimitry Timokhovдиалоговая форма из п. г) выводится на заднем плане.

DisableProcessWindowsGhosting


Смотрел DisableProcessWindowsGhosting.

Ну это слишком сурово по отношению к пользователям.
После вызова DisableProcessWindowsGhosting, если приложение занято, то уйдя в другое приложение, невозможно вернуть приложение ни по клику на иконке снизу, ни через Alt+TAB. Оно появится только после окончания расчета.

Пользователь будет в шоке...

Вот если бы "(не отвечает)" можно было заменить на "(думает)", то было бы клево)))
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39835645
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry TimokhovНу это слишком сурово по отношению к пользователям.

Значит пришло время быть суровым к себе и исправить пункт б).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39835656
Dimitry Timokhov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov, когда сами MS исправят свой Excel (у меня 365) так, что при открытии больших-больших файлов в шапке не показывается "(не отвечает)", тогда и я поправлю))))

Совет хороший и правильный. Учту!
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39835657
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Круговая порука рукожопов, да простит меня Рустам...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39835662
Dimitry Timokhov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov, полностью поддерживаю - Excel'ю 30 лет, а никак в отдельный потом загрузку не вынесут. И пресловутую ошибку с _FilterDatabase до сих пор не исправят, и не сделают штатную возможность выставления ширины колонок в миллиметрах...

Но также интересно, неужели в программах Дмитрия Сибирякова весь ввод/вывод вынесен в отдельный поток? И даже из файлов чтение в отдельном потоке (там тоже может подвиснуть внешнее устройство)? И с БД работа вся асинхронная?
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39835666
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry TimokhovИ с БД работа вся асинхронная?

Ты не поверишь...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39835699
Dimitry Timokhov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov, у меня нет оснований тебе не верить.

Я, конечно, "закис" в своем приложении, когда сервер с локальной гигабитной сети. И мелочь при обращении к серверу поточить смысла просто нет. Отчеты вот надо отпоточить. В планах стоит.

Интересно, что у тебя за приложение, в котором тотальное асинхронное общение с БД? Что за тип приложения? Чем технически это делаешь? Своя библиотека или штатными средствами Delphi пользуешься? Расскажи, плз, интересно же. Первый раз встречаю приложение на Delphi с полностью асинхронным взаимодействием с БД.
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39835703
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry TimokhovЧем технически это делаешь?

Один юнит размером в три экрана, который выполняет любую процедуру в фоне, сопровождая это
модальным окном прогресса. При том, что вся работа с БД вынесена в отдельный слой больше
не требуется.

И нет, эта асинхронность не тотальна. Запросы-однострочники для выборки-изменения одной
записи (каковых в логике подавляющее большинство) идут синхронно.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39835708
Dimitry Timokhov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovDimitry TimokhovЧем технически это делаешь?

Один юнит размером в три экрана, который выполняет любую процедуру в фоне, сопровождая это
модальным окном прогресса. При том, что вся работа с БД вынесена в отдельный слой больше
не требуется.

А когда выполняешь любую процедуру (БД?) в фоне, чем к БД коннектишься?
И интересно, как прогресс определяешь?
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39835713
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry TimokhovА когда выполняешь любую процедуру (БД?) в фоне, чем к БД коннектишься?

Используется основной (единственный) коннект. Прогресс - по этапам обработки.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39835724
Dimitry Timokhov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovDimitry TimokhovА когда выполняешь любую процедуру (БД?) в фоне, чем к БД коннектишься?

Используется основной (единственный) коннект. Прогресс - по этапам обработки.

Ок. Понятно. Всё логично.

У меня тоже есть некоторые долгие запросы к БД в доп. потоке. Использую ADO, синхронно. Сам импортировал OLE либу (т.е. стандартными компонентами не пользуюсь). Даже, если бы пользовался асинхроном ADO, то там все равно нет А) прогресса и Б) не прервешь (я не нашел). Т.к. ADO по определению имеет потоковую модель apartment, а не multithreaded, то долгие запросы делаю в отдельном коннекте, т.к. не могу использовать один ADODB.Connection из двух потоков.

Критично то, что замирание на 5+ сек есть во встроенном скриптовом языке. На это я повлиять не могу. Пишут прикладные разработчики. Там есть и GUI и вычисления... Там уж не распоточишь это дело легко.

Собственно, поэтому и влез в топик. Чтобы понять и разобраться с режимом Ghost, в который Windows принудительно переводит любое приложение через 5 сек, если то не вызывает PeekMessage или аналоги.
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39836063
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry TimokhovЧтобы понять и разобраться с режимом Ghost, в который Windows принудительно переводит любое приложение через 5 сек, если то не вызывает PeekMessage или аналоги.
Собственно, если проверяется просто вызов Peek/GetMessage, то запуск фонового потока, создающего невидимое окно и таймер и крутящего цикл выборки сообщений, решит проблему "призракизации". А если это окно будет видимо, и будет показывать симпатичную анимашку или просто прогресс-бар, так совсем хорошо
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39836065
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Только никакого VCL в фоновом потоке! Только WinAPI. Если CreateWindow слишком лениво, то помогут диалоги из ресурсов
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39836069
Dimitry Timokhov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Василий 2Dimitry TimokhovЧтобы понять и разобраться с режимом Ghost, в который Windows принудительно переводит любое приложение через 5 сек, если то не вызывает PeekMessage или аналоги.
Собственно, если проверяется просто вызов Peek/GetMessage, то запуск фонового потока, создающего невидимое окно и таймер и крутящего цикл выборки сообщений, решит проблему "призракизации". А если это окно будет видимо, и будет показывать симпатичную анимашку или просто прогресс-бар, так совсем хорошо

Погоди))

Правильно я понимаю, что ты говоришь о том, можно PeekMessage делать в доп. потоке для окна, созданного средствами WinAPI в этом потоке, и этого будет достаточно, чтобы Windows не перевел *все* приложение в режим ghost?

Иными словами, ты считаешь, что достаточно делать PeekMessage в *любом* потоке процесса, а не обязательно в главном (первом) потоке?
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39836070
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovОдин юнит размером в три экрана, который выполняет любую процедуру в фоне, сопровождая это модальным окном прогресса.
А смысл? Ну то есть вот есть некий запрос, который открывается десять секунд. В чём преимущество открывать его в фоне, закрыв модальным окном, по сравнению с crSQLWait в основном потоке?
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39836071
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Timokhov,

правильно, но хоть какое-то окно должно быть видимо, так как кто-то должен обрабатывать сообщения
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39836073
Dimitry Timokhov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarerА смысл? Ну то есть вот есть некий запрос, который открывается десять секунд. В чём преимущество открывать его в фоне, закрыв модальным окном, по сравнению с crSQLWait в основном потоке?
Не мне, но предположу.
Так все равно же в "(не отвечает)" впадает главная форма.
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39836078
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry TimokhovТак все равно же в "(не отвечает)" впадает главная форма.
Для этого нужно куда больше времени. Столько, что и в форме "модального окна с прогрессом" пользователя не устроит (во всяком случае, меня бы не устроило).
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39836082
Dimitry Timokhov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kealon(Ruslan),
Василий 2,

В общем проверил:
1. Создал окно на WinAPI (выбрал из другого своего проекта). Оно живое, обрабатывает очередь. Даже перерисовывается.
2. Все равно - через 5 сек в главном окне появляется "(не отвечает)".

Вывод - Windows анализирует очередь главного (первого) потока. А не всех, которые принадлежат процессу.
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39836083
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerНу то есть вот есть некий запрос, который открывается десять секунд. В чём преимущество
открывать его в фоне, закрыв модальным окном, по сравнению с crSQLWait в основном потоке?

1) Приложение не впадает в статус "Не отвечает", как уже сказали.
2) Окна не становятся белыми если провести над ними другое окно (переключиться на другое
приложение). Что, собственно, следствие п.1.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39836085
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerпо сравнению с crSQLWait в основном потоке?

А если ты имеешь ввиду запустить запрос в фоне, а в главном потоке всего лишь сменить
курсор, то это, конечно, тоже неплохо, но придётся отдельно заботиться о том, чтобы
пользователь этим курсором не тыкал куда не надо. А мне лень. ShowModal отбивает
возможность "потыкать" автоматически.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39836092
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov1) Приложение не впадает в статус
2) Окна не становятся белыми
Ясно. Мне эти соображения представляются важными, когда время открытия запроса измеряется минутами. Ради секунд я не стал бы заморачиваться. За десять секунд условный пользователь не особо успеет переключиться в другое приложение, схватить его окно и начать таскать над первым даже если предположить, что ему вдруг зачем-то понадобилось это сделать.
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39836253
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Timokhovkealon(Ruslan),
Василий 2,

В общем проверил:
1. Создал окно на WinAPI (выбрал из другого своего проекта). Оно живое, обрабатывает очередь. Даже перерисовывается.
2. Все равно - через 5 сек в главном окне появляется "(не отвечает)".

Вывод - Windows анализирует очередь главного (первого) потока. А не всех, которые принадлежат процессу.
Любопытно, хотя и странно. Какое дело Винде, какой там из потоков главный...
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39836291
Dimitry Timokhov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Василий 2Dimitry Timokhovkealon(Ruslan),
Василий 2,

В общем проверил:
1. Создал окно на WinAPI (выбрал из другого своего проекта). Оно живое, обрабатывает очередь. Даже перерисовывается.
2. Все равно - через 5 сек в главном окне появляется "(не отвечает)".

Вывод - Windows анализирует очередь главного (первого) потока. А не всех, которые принадлежат процессу.
Любопытно, хотя и странно. Какое дело Винде, какой там из потоков главный...

Чем больше думаю про эти ghost-окна, тем больше понимаю, что сделано в Windows все логично.
Будь у приложения 1000 потоков, Винда "ляжет" в цикле проверять их все.
Поэтому проверяет только очередь основного потока и порожденные им окна.

Видимо предполагается, что основной поток <=> главное окно.

Хотя Windows могли бы лучше это все задокументировать. ИМХО.
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39836304
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
11.07.2019 12:23, Dimitry Timokhov пишет:
> Видимо предполагается, что основной поток <=> главное окно.
> Хотя Windows могли бы лучше это все задокументировать. ИМХО.

Код: pascal
1.
2.
GetWindowThreadProcessId(hWindow, @PID);
if IsMainWindow(hWindow) then ...


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39836314
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2Dimitry Timokhovkealon(Ruslan),
Василий 2,

В общем проверил:
1. Создал окно на WinAPI (выбрал из другого своего проекта). Оно живое, обрабатывает очередь. Даже перерисовывается.
2. Все равно - через 5 сек в главном окне появляется "(не отвечает)".

Вывод - Windows анализирует очередь главного (первого) потока. А не всех, которые принадлежат процессу.
Любопытно, хотя и странно. Какое дело Винде, какой там из потоков главный...тогда скорее всего проверяются все главные окна
через SendMessageTimeOut, это логично бы было
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39836323
Dimitry Timokhov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kealon(Ruslan)Василий 2пропущено...

Любопытно, хотя и странно. Какое дело Винде, какой там из потоков главный...тогда скорее всего проверяются все главные окна
через SendMessageTimeOut, это логично бы было

Вот и я про то же - могли бы лучше описать. Я лично не нашел чего-то внятного. Только пояснения на форумах и минимум текста в описании MSDN по теме...

И шикарная фраза "[This function is not intended for general use. It may be altered or unavailable in subsequent versions of Windows.]" тут https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-ishungappwindow...

Видимо, думают, а не "сносить" ли такие приложения сразу в Windows 11+?)))

Хотя все это не важно - ghost в любом случае лучше, чем без него.
Т.е. если вызвать DisableProcessWindowsGhosting, то вообще все мрет. А с гостом хоть отрисовывается и показывает, что "(не отвечает)". Т.е. имитация жизни))) И дает надежду, что отомрет.
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39836334
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Timokhov,

странно, попытался завесить окно с помощью Sleep (кнопка Test), не выходит заморозка

Win10 Home

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

тынц
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39836340
Dimitry Timokhov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kealon(Ruslan)странно, попытался завесить окно с помощью Sleep (кнопка Test), не выходит заморозка

"Exe" это, конечно, круто)))
Но только после того, как пол литра хотя бы вместе выпьем))

Тыкал на шапку главной формы?
В ghost вообще *может* (видимо) не впадать, если запустил и ждешь. Но если тыкнешь на главную форму, то сразу впадет.
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39836345
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Timokhov,

нефига не впадает

PS: есть же виртуалки если боишься, но могу заверить что там ничего нет, это тестовое приложение для WinAPI.
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39836351
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovпридётся отдельно заботиться о том, чтобы
пользователь этим курсором не тыкал куда не надо. А мне лень. ShowModal отбивает
возможность "потыкать" автоматическимне тоже лень сделать красиво, потому просто дизаблю главную форму, оставляя возможность потаскать окно сплэша-прогресса (даже не модальное) и ткнуть в нем кнопку отмены, при наведении мыши на к-ю часики меняются на обычный курсор
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39836365
Dimitry Timokhov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kealon(Ruslan)нефига не впадает

PS: есть же виртуалки если боишься, но могу заверить что там ничего нет, это тестовое приложение для WinAPI.

1. По виртуалки. Но на моем HP ProBook 450 G5, если в биосе включить виртуализацию, то он грузится по 40 минут. Видимо, глюк. Но я так и не собрался в сервис сносить... Сижу без виртуалки.

2. Ок. Этап поллитры для пропустим))
Посмотрел. Не претендую на исходники. Понимаю, что тестовое приложение с кучей ценных фишек))

3. Что делаю:
а. Запустил.
б. Нажал "Test"
в. Сразу кликнул на шапку - ноль реакции (потаскать тоже нельзя).
г. Подождал 5 сек и кликнул на шапке => "(не отвечает)", можно таскать.
Сделал аналог, только открыл несколько форм.
На каждой через 5 сек получаю "(не отвечает)".

Win 10 Pro 64-бита

Я немного запутался. Правильно понимаю, что ты хочешь сказать, что любое окно можно повесить?
Ну собсно, я вроде не отрицал. Я говорил, что если есть еще одно *живое* окно в еще одном потоке, то это не будет препятствовать главному окну впасть в "(не отвечает)". Т.е. проверил совет 21924358

Вывод - Windows проверяет очередь каждого потока и анализирует необходимость впадать в "(не отвечает)" для окно этого потока.

ЗЫ Кода не видел твоего. Может я что-то неверно понял.
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39836372
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Timokhov,

да ничего особенного

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
procedure TWin.WMCommand(var msg: TWMCommand);
var s:WinString;
begin
  ...
  if Button1.isThisCtrl(msg.Ctl) then begin
    Sleep(30* 1000);
  ...
  if Button2.isThisCtrl(msg.Ctl) then begin
    TMyThread.Create(false);
  ...
end;

  TMyThread = class (TThread)
   protected
    procedure Execute; override;
  end;

procedure TMyThread.Execute;
begin
  CD.CreateWin(0,0,0,420,470,'Hello world');
//  TWin.Create(0,0,0,420,470,'Hello world');
  AppRun;

  FreeOnTerminate:=true;
end;



только оказывается и первое окно не в главном потоке :-(

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
begin
  CD:=TWin.RegisterAs;

  TMyThread.Create(false);

  repeat
    Sleep(1000);
  until WinCount=0;
end.         


а в главном консоль выходит

ладно, нету времени тест дорабатывать, завтра попробую потестить
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39836376
Dimitry Timokhov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kealon(Ruslan)ладно, нету времени тест дорабатывать, завтра попробую потестить
Тут скорее интерес теоретический.
Ибо, похоже, все же надо писать программы так, чтобы не было "(не отвечает)".
А то введет Windows вообще репрессии в будущем - десктопные приложения не имеют права засыпать больше, чем на 5 секунд. Не зря MSDN так скупо тему описывает.
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39836377
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий
Код: pascal
1.
2.
GetWindowThreadProcessId(hWindow, @PID);
if IsMainWindow(hWindow) then ...



Это вот эта шняга с SO имеется в виду?
Код: plaintext
1.
2.
3.
4.
BOOL IsMainWindow(HWND handle)
{
   return GetWindow(handle, GW_OWNER) == (HWND)0 && IsWindowVisible(handle);
}
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39836382
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем, получается, что безопаснее всего вызывать долгие операции в фоне, а в главном потоке показывать модальный прогресс-бар, блокируя главную форму (если эти операции не рассчитаны на отправку в фон).
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39836402
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2В общем, получается, что безопаснее всего вызывать долгие операции в фоне, а в главном потоке показывать модальный прогресс-бар, блокируя главную форму (если эти операции не рассчитаны на отправку в фон).
Модальности можно избежать, если делать интерфейс на action-ах. Тут можно вспомнить недавний разговор про статусбары :) В наиболее полном виде я сделал такую систему в одном из проектов, там было так:

- действие по умолчанию блокировало все прочие (action-ы дисейблились)
- действие могло быть прерываемым (в статусбар выводилась кнопка break)
- действие могло сообщать информацию о прогрессе (в статусбар выводился прогрессбар)
- действие могло сообщать название выполняемой стадии (выводилось либо в статусбар, либо в отдельном псевдомодальном окне в зависимости от важности операции.

В качестве бонуса - пока выполнялось это действие, можно было скроллировать карту в главном окне, менять масштаб и делать прочие безобидные вещи.
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39836404
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пользуюсь DisableProcessWindowsGhosting и все ок.
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39836417
Dimitry Timokhov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Василий 2В общем, получается, что безопаснее всего вызывать долгие операции в фоне, а в главном потоке показывать модальный прогресс-бар, блокируя главную форму (если эти операции не рассчитаны на отправку в фон).

Походу, именно так.

Другой вопрос, что просто оправить свои алгоритмы (без обращения к БД) в фон - это легко.
Другой вопрос, что в фон надо отправить обращение к БД.
А вот тут вопрос, как делать.

Я, вот, ADODB пользуюсь. Насколько я понимаю, там потоковая модель Both. Но работаю с ней как STA (сама дельфа вызывает за меня CoInitialize) Т.е. если мелочь миллисекундная по обращению к БД идет из главного потока, а отчеты надо делать из доп. потока... то не понятно, как обращаться к ADODB - нельзя же из разных потоков.

Или можно? Сколько ни пытаюсь эти STA/MTA понять, все никак...
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39836418
Dimitry Timokhov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rgreatПользуюсь DisableProcessWindowsGhosting и все ок.
У меня пользователи сами распараллеливают свою работу: 2-3 клиента запускают.
В одном вводят, в другом - отчеты считают.
После вызова DisableProcessWindowsGhosting приложение наглухо гаснет - ни мышкой не достанешь, ни ALT+TAB... Будет паника - все повисло, караул!!!
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39836428
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Timokhov,

Там гже пользуюсь у меня приложение гарантированно одно. Через мютекс.
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39836429
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и "Пожалуйста подождите." всегда надо в нужных моментах пользователю писать.
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39836431
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С обственно это ленивое решение проблемы, которую по хорошему надо решать выносом кода в отдельные от GUI потоки.
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39836433
Dimitry Timokhov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rgreatТам гже пользуюсь у меня приложение гарантированно одно. Через мютекс.
ну все равно имхо не айс:
1. запустил приложение твой пользователь
2. при запуске ты вызвал DisableProcessWindowsGhosting
3. пользователь запустил отчет.
4. пошел почту проверить в браузере.
5. а в приложение не вернешься уже...пока отчет не выполнится до конца.
полное ощущение "зависа"...
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39836435
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Timokhov3. пользователь запустил отчет.
4. пошел почту проверить в браузере.
5. а в приложение не вернешься уже...пока отчет не выполнится до конца.
полное ощущение "зависа"...
Если пользователя заранее предупредить что мол "ждите" - ничего страшного не будет.
И уж точно это лучше чем если пользователь "случайно" закроет работающую Ghost форму.
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39836439
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И не забываем и о других глюках которые возможны если юзер будет всячески кликать и таскать Ghost формы.
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39836441
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Timokhovв фон надо отправить обращение к БД.
А вот тут вопрос, как делатькак вариант писать свои обертки к-е прозрачно перенесут все обращения к бд в поток, само клиентское приложение в местах открытия датасетов трогать не придется
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39836444
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry TimokhovВасилий 2В общем, получается, что безопаснее всего вызывать долгие операции в фоне, а в главном потоке показывать модальный прогресс-бар, блокируя главную форму (если эти операции не рассчитаны на отправку в фон).

Походу, именно так.

Другой вопрос, что просто оправить свои алгоритмы (без обращения к БД) в фон - это легко.
Другой вопрос, что в фон надо отправить обращение к БД.
А вот тут вопрос, как делать.

Я, вот, ADODB пользуюсь. Насколько я понимаю, там потоковая модель Both. Но работаю с ней как STA (сама дельфа вызывает за меня CoInitialize) Т.е. если мелочь миллисекундная по обращению к БД идет из главного потока, а отчеты надо делать из доп. потока... то не понятно, как обращаться к ADODB - нельзя же из разных потоков.

Или можно? Сколько ни пытаюсь эти STA/MTA понять, все никак...COINIT_MULTITHREADED = 0; // OLE calls objects on any thread.

но там скорее всего на гуи обвязка от VCL, либо напрямую с интерфейсами работать либо очень осторожно в обход расставленных граблей, и так швах и так швах выходит
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39836454
Dimitry Timokhov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kealon(Ruslan)но там скорее всего на гуи обвязка от VCL, либо напрямую с интерфейсами работать либо очень осторожно в обход расставленных граблей, и так швах и так швах выходит

у меня от VCL используется только совсем база, без которой нельзя. Никакими датабазными компонентами не пользуюсь. Грид свой. ADODB импортировал сам лет 20 назад, периодически переимпортирую. Т.е. ADODB в моих руках. Курсорами не пользуюсь. Через ADODB.Recordset забираю все, что нужно, через ADODB.Command путем вызова сохр. процедур возвращаю, что поменял.

Вывод - к интерфейсам ADODB имею прямой доступ.

Вообще, всегда был уверен, что ADODB имеет потоковую модель STA. Посмотрел в реестре- BOTH!! Т.е. и в MTA тоже, по идее, могёт.

kealon(Ruslan)COINIT_MULTITHREADED = 0; // OLE calls objects on any thread.
Но это, насколько понимаю, надо само мое приложение в таком режиме запустить и все потоки тоже, чтобы они попали в один MTA.
Если с потоками понятно - CoInitializeEx(COINIT_MULTITHREADED) - то, что делать с главным потоком, чтобы он тоже попал в MTA? Нашел ComObj.CoInitFlags - оно?

Надо попробовать, но здорово было знать, что оно получится)))

Может есть у кого опыт использования ADODB в режиме MTA?
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39836459
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Timokhovkealon(Ruslan)COINIT_MULTITHREADED = 0; // OLE calls objects on any thread.
Но это, насколько понимаю, надо само мое приложение в таком режиме запустить и все потоки тоже, чтобы они попали в один MTA.
Если с потоками понятно - CoInitializeEx(COINIT_MULTITHREADED) - то, что делать с главным потоком, чтобы он тоже попал в MTA? Нашел ComObj.CoInitFlags - оно?каждый поток создающий объекты, которые могут использоваться в других потоках должен вызывать CoInitializeEx(COINIT_MULTITHREADED)
вложенный запуск тоже поддерживается, т.е. достаточно например при старте формы
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39836461
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Timokhovчто делать с главным потоком, чтобы он тоже попал в MTA?это иногда путь к потенциальным траблам к сожалению
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39836462
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Timokhovу меня от VCL используется только совсем база, без которой нельзя. Никакими датабазными компонентами не пользуюсьподход в любом случае можно сохранить аналогичный, инициируя в месте "открытия"/загрузки ожидание завершения фактического обращения к бд в другом потоке, с прокруткой/обработкой цикла виндовых сообщений
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39836483
Dimitry Timokhov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vavanподход в любом случае можно сохранить аналогичный, инициируя в месте "открытия"/загрузки ожидание завершения фактического обращения к бд в другом потоке, с прокруткой/обработкой цикла виндовых сообщений
Ну о том, что так нельзя, весь топик, начиная с моего тут появления))
Если в другом потоке обрабатывать очередь (свою очередь - PeekMessage не может же обрабатывать очередь чужого потока!), то это не спасет первый поток и главную форму от впадения в ghost-режим. Вот 21924390 и вот 21924838 .

Выход один - долгий запрос выводить в отдельный безоконный поток. А в главном крутить (обрабатывая очередь) прогресс или просто вывешивать форму.
Ну и как-то научиться юзать AdoDb.Connection из этого отдельного потока, тогда как сам объект AdoDb.Connection был создан в главном потоке.
Пойду про MTA почитаю:) Вот статья есть https://rsdn.org/?article/com/apartmnt.xml
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39836503
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Timokhovо том, что так нельзя, весь топик, начиная с моего тут появления))
Если в другом потоке обрабатывать очередьа я толкую про обработку в основном
...
Рейтинг: 0 / 0
Параметр реестра HungAppTimeout
    #39836567
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry TimokhovНу и как-то научиться юзать AdoDb.Connection из этого отдельного потока, тогда как сам объект AdoDb.Connection был создан в главном потоке.
Если там унутрях никаких своих ProcessMessages нету, то в принципе при условии полной блокировки обращения к БД со стороны главного потока не должно быть проблем при использовании connection из фонового потока
...
Рейтинг: 0 / 0
78 сообщений из 78, показаны все 4 страниц
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Параметр реестра HungAppTimeout
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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