|
|
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
На этом форуме параметр реестра 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-разрядных версиях). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2019, 21:06 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
DmSer, а почему бы не поменять логику при загрузке dll-ок? перед загрузкой отображаешь splash form (закрытие окна блокируешь), потом грузишь по одной dll и после загрузки каждой делаешь application.processmessages. Можно еще progressbar со статусом загрузки обновлять, чтобы юзер видел, что ничего не зависло. После загрузки всех библиотек это splash form уничтожаешь и приложение работает в обычном режиме. И не надо HungAppTimeout лишний раз трогать, ибо он не всегда доступен для изменения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2019, 23:47 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
DmSerНа этом форуме параметр реестра HungAppTimeout ещё не обсуждался, хотя странно, это довольно важный параметр, благодаря которому можно повысить надежность ПО ..... если не лезть трогать его грязными руками. DmSerВ нашем ПО есть следующая проблема: По описанию я вижу минимум три проблемы: 1. Инициализация приложения надолго грузит основной поток 2. Создаваемые окна получают неправильные настройки в результате чего возможно нарушение видимого порядка и следующие из этого артефакты поведения 3. Недостаточно квалифицированные разработчики предпочитают решать проблему методом "кувалдой в лоб" вместо того, чтобы подумать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2019, 00:10 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
Приму к сведению, спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2019, 00:12 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
если не лезть трогать его грязными руками. Поставил его 10000. Это решило проблему. Думаю, лучше сделать 20000. Наше ПО зависает крайне редко, но небольшие подвисания возможны. Вам известно, к каким проблемам это может привести? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2019, 00:20 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
автор 3. Недостаточно квалифицированные разработчики предпочитают решать проблему методом "кувалдой в лоб" вместо того, чтобы подумать. Существует масса куда более важных вещей, о которых стоит подумать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2019, 00:29 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
DmSer, delayed загрузку DLL не предлагать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2019, 00:41 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
asviridenkovDmSer, delayed загрузку DLL не предлагать? Ваше дело предложить, наше ... Приму к сведению! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2019, 06:39 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
Если DLL тяжелая, она и одна может хорошо так загрузить. По-хорошему, надо максимально облегчать DLLMain, выносить тяжелые действия в отдельную Init. Правда, придется во все остальные функции добавлять проверку флага - был вызван Init или нет. Либо грузить в отдельном потоке. Возможны подводные камни в зависимости от внутренностей DLL. Например, она может заводить свои глобальные переменные в TLS, тогда уже в главный поток не передашь. Тут еще надо понять, каким образом приложение должно "ответить". Вызов GetMessage? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2019, 10:58 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
Василий 2Если DLL тяжелая, она и одна может хорошо так загрузить. Значит, если она действительно нужна такая тяжёлая, нужно внутрь неё вставить ProcessMessages. Василий 2По-хорошему, надо максимально облегчать DLLMain, выносить тяжелые действия в отдельную Init. Правда, придется во все остальные функции добавлять проверку флага - был вызван Init или нет. По-хорошему, такое надо просто выносить в ленивую инициализацию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2019, 11:32 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
softwarer 1. Инициализация приложения надолго грузит основной поток 2. Создаваемые окна получают неправильные настройки в результате чего возможно нарушение видимого порядка и следующие из этого артефакты поведения 3. Недостаточно квалифицированные разработчики предпочитают решать проблему методом "кувалдой в лоб" вместо того, чтобы подумать. Отвечу ещё раз по пунктам. 1. Инициализация действительно надолго грузит основной поток. Это происходит, если программа находится в автозагрузке и используется HDD. В этом случае помимо нашего ПО параллельно грузится ещё масса других программ, что создаёт большую нагрузку на HDD. Плюс ещё и наше ПО при загрузке много чего пишет на диск. 2. Создаются VCL-окна с параметрами "по умолчанию". Никакими левыми настройками не увлекаемся. 3. Стараемся со своей стороны делать всё возможное, чтобы в основном потоке не выполнялось тяжёлых операций. Но работа с мелкими файлами и мелкие запросы к БД в основном потоке - в большом количестве, думаю, как и у всех Delphi-программистов. У программистов C# в этом случае преимущество, т.к. можно использовать механизм async/await. 4. Речь в этой ветке должна идти не об нашей программе. Если бы я горел желанием её обсуждать, то завёл бы другую ветку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2019, 13:02 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
DmSer, автор Инициализация действительно надолго грузит основной поток. Может быть имеет смысл сделать инициализацию в доп потоке? пусть бы основной сообщениями занимался, как положено, проблем меньше будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2019, 13:10 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
makhaonDmSer, автор Инициализация действительно надолго грузит основной поток. Может быть имеет смысл сделать инициализацию в доп потоке? пусть бы основной сообщениями занимался, как положено, проблем меньше будет. Конечно, так было бы лучше, не спорю! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2019, 13:32 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
DmSerИнициализация действительно надолго грузит основной поток. Значит, стоит подумать, что здесь можно смягчить. Например, так ли нужно синхронно писать "много чего" при загрузке или пойдёт асинхронная запись. Итп. DmSer2. Создаются VCL-окна с параметрами "по умолчанию". Никакими левыми настройками не увлекаемся. Не во всех версиях дельфы это хороший вариант. Иногда стоит поиграть PopupMode/PopupParent для того, чтобы добиться адекватного поведения форм. DmSer3. Стараемся со своей стороны делать всё возможное, чтобы в основном потоке не выполнялось тяжёлых операций. Но работа с мелкими файлами и мелкие запросы к БД в основном потоке - в большом количестве И они все прямо так необходимы именно при инициализации? DmSer4. Речь в этой ветке должна идти не об нашей программе. Грубые люди реагируют на такие реплики в духе "Командовать будешь своей женой". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2019, 13:49 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
Все зависит от того, насколько возможно модифицировать эти самые DLL. Если они полностью под контролем, то можно кучу всего придумать - и заточить под фоновый поток, и добавить коллбэки, и даже внутрях запускать в фоне. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2019, 14:36 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
Василий 2Все зависит от того, насколько возможно модифицировать эти самые DLL Для внешних DLL можно написать прокладку, находящуюся полностью под контролем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2019, 14:40 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
Грубые люди реагируют на такие реплики в духе "Командовать будешь своей женой" Слава богу на этом форуме есть культурный человек, на которого всем нужно равняться =) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2019, 17:31 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
softwarerВасилий 2Все зависит от того, насколько возможно модифицировать эти самые DLL Для внешних DLL можно написать прокладку, находящуюся полностью под контролем. Можно, но не всегда от этого будет польза. Если DLL, к примеру, размещает свои внутренние переменные в TLS текущего потока - хоть обпрокладывайся, но передать либу после иниц-ии в главный поток будет затруднительно. Везде надо смотреть по ситуации. А ТС-а, по-моему, и так все устраивает))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2019, 17:50 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
Вот что ещё удалось выяснить: если создавать модальную форму таким образом: TMyForm.Create(nil), то при зависании (Sleep(20000)) после того как на ней появится "Не отвечает" можно будет щелкнуть на низлежащей форме и она окажется на переднем плане. Когда зависание кончится, модальное окно остаётся снизу. Если же в конструктор передавать ссылку на форму, из которой открывается модальная форма, то вся цепочка модальных форм корректно восстанавливается после окончания зависания. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2019, 13:06 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
DmSerКогда зависание кончится, модальное окно остаётся снизу.Alt+Tab ее поднимет DmSerЕсли же в конструктор передавать ссылку на форму, из которой открывается модальная форма,Достаточно передать Application ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2019, 15:46 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_DmSerКогда зависание кончится, модальное окно остаётся снизу.Alt+Tab ее поднимет DmSerЕсли же в конструктор передавать ссылку на форму, из которой открывается модальная форма,Достаточно передать Application Мой тест показал, что передавать Application недостаточно. Глючит при этом реже, чем с nil. Но если передавать ссылку на форму, из которой выполняется вызов ShowModal, то сбоев вообще не возникает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2019, 11:57 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
Приветствую! Спасибо за тему! Столкнулся с аналогичной проблемой: а. Есть алгоритм, который работает 10 сек. б. И конечно в главном потоке))) Ну бывает... в. Windows 10 через 3 сек. решает, что приложение зависло и добавляет в шапку "(не отвечает)". Правда, не выводит свое дополнительное окно. г. Моя программа доделывает алгоритм и выводит сообщение - это моя форма (не штатный MessageDlg), выводимая через ShowModal. Причем в качестве AOwner передаю Application. д. Иногда (и непонятно, почему) диалоговая форма из п. г) выводится на заднем плане. В ходе разбирательств пришел к выводу, что вызов Application.ProcessMessages перед ShowModal решает проблему. В ходе тестов 1 раз на 10-20 раз мне удается получить уход на второй план диалоговой формы. Если перед ShowModal вызывать Application.ProcessMessages, то не удалось получить проблему ни разу. Понимаю, что это "кувалдой в лоб", но вроде работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2019, 14:46 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
Dimitry Timokhovдиалоговая форма из п. г) выводится на заднем плане. DisableProcessWindowsGhosting ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2019, 16:56 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_Dimitry Timokhovдиалоговая форма из п. г) выводится на заднем плане. DisableProcessWindowsGhosting Смотрел DisableProcessWindowsGhosting. Ну это слишком сурово по отношению к пользователям. После вызова DisableProcessWindowsGhosting, если приложение занято, то уйдя в другое приложение, невозможно вернуть приложение ни по клику на иконке снизу, ни через Alt+TAB. Оно появится только после окончания расчета. Пользователь будет в шоке... Вот если бы "(не отвечает)" можно было заменить на "(думает)", то было бы клево))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2019, 17:53 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
Dimitry TimokhovНу это слишком сурово по отношению к пользователям. Значит пришло время быть суровым к себе и исправить пункт б). Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2019, 18:44 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, когда сами MS исправят свой Excel (у меня 365) так, что при открытии больших-больших файлов в шапке не показывается "(не отвечает)", тогда и я поправлю)))) Совет хороший и правильный. Учту! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2019, 18:51 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
Круговая порука рукожопов, да простит меня Рустам... Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2019, 18:55 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, полностью поддерживаю - Excel'ю 30 лет, а никак в отдельный потом загрузку не вынесут. И пресловутую ошибку с _FilterDatabase до сих пор не исправят, и не сделают штатную возможность выставления ширины колонок в миллиметрах... Но также интересно, неужели в программах Дмитрия Сибирякова весь ввод/вывод вынесен в отдельный поток? И даже из файлов чтение в отдельном потоке (там тоже может подвиснуть внешнее устройство)? И с БД работа вся асинхронная? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2019, 19:08 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
Dimitry TimokhovИ с БД работа вся асинхронная? Ты не поверишь... Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2019, 19:13 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, у меня нет оснований тебе не верить. Я, конечно, "закис" в своем приложении, когда сервер с локальной гигабитной сети. И мелочь при обращении к серверу поточить смысла просто нет. Отчеты вот надо отпоточить. В планах стоит. Интересно, что у тебя за приложение, в котором тотальное асинхронное общение с БД? Что за тип приложения? Чем технически это делаешь? Своя библиотека или штатными средствами Delphi пользуешься? Расскажи, плз, интересно же. Первый раз встречаю приложение на Delphi с полностью асинхронным взаимодействием с БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2019, 20:55 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
Dimitry TimokhovЧем технически это делаешь? Один юнит размером в три экрана, который выполняет любую процедуру в фоне, сопровождая это модальным окном прогресса. При том, что вся работа с БД вынесена в отдельный слой больше не требуется. И нет, эта асинхронность не тотальна. Запросы-однострочники для выборки-изменения одной записи (каковых в логике подавляющее большинство) идут синхронно. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2019, 21:12 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovDimitry TimokhovЧем технически это делаешь? Один юнит размером в три экрана, который выполняет любую процедуру в фоне, сопровождая это модальным окном прогресса. При том, что вся работа с БД вынесена в отдельный слой больше не требуется. А когда выполняешь любую процедуру (БД?) в фоне, чем к БД коннектишься? И интересно, как прогресс определяешь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2019, 21:34 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
Dimitry TimokhovА когда выполняешь любую процедуру (БД?) в фоне, чем к БД коннектишься? Используется основной (единственный) коннект. Прогресс - по этапам обработки. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2019, 22:10 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovDimitry TimokhovА когда выполняешь любую процедуру (БД?) в фоне, чем к БД коннектишься? Используется основной (единственный) коннект. Прогресс - по этапам обработки. Ок. Понятно. Всё логично. У меня тоже есть некоторые долгие запросы к БД в доп. потоке. Использую ADO, синхронно. Сам импортировал OLE либу (т.е. стандартными компонентами не пользуюсь). Даже, если бы пользовался асинхроном ADO, то там все равно нет А) прогресса и Б) не прервешь (я не нашел). Т.к. ADO по определению имеет потоковую модель apartment, а не multithreaded, то долгие запросы делаю в отдельном коннекте, т.к. не могу использовать один ADODB.Connection из двух потоков. Критично то, что замирание на 5+ сек есть во встроенном скриптовом языке. На это я повлиять не могу. Пишут прикладные разработчики. Там есть и GUI и вычисления... Там уж не распоточишь это дело легко. Собственно, поэтому и влез в топик. Чтобы понять и разобраться с режимом Ghost, в который Windows принудительно переводит любое приложение через 5 сек, если то не вызывает PeekMessage или аналоги. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2019, 22:49 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
Dimitry TimokhovЧтобы понять и разобраться с режимом Ghost, в который Windows принудительно переводит любое приложение через 5 сек, если то не вызывает PeekMessage или аналоги. Собственно, если проверяется просто вызов Peek/GetMessage, то запуск фонового потока, создающего невидимое окно и таймер и крутящего цикл выборки сообщений, решит проблему "призракизации". А если это окно будет видимо, и будет показывать симпатичную анимашку или просто прогресс-бар, так совсем хорошо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2019, 18:08 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
Только никакого VCL в фоновом потоке! Только WinAPI. Если CreateWindow слишком лениво, то помогут диалоги из ресурсов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2019, 18:09 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
Василий 2Dimitry TimokhovЧтобы понять и разобраться с режимом Ghost, в который Windows принудительно переводит любое приложение через 5 сек, если то не вызывает PeekMessage или аналоги. Собственно, если проверяется просто вызов Peek/GetMessage, то запуск фонового потока, создающего невидимое окно и таймер и крутящего цикл выборки сообщений, решит проблему "призракизации". А если это окно будет видимо, и будет показывать симпатичную анимашку или просто прогресс-бар, так совсем хорошо Погоди)) Правильно я понимаю, что ты говоришь о том, можно PeekMessage делать в доп. потоке для окна, созданного средствами WinAPI в этом потоке, и этого будет достаточно, чтобы Windows не перевел *все* приложение в режим ghost? Иными словами, ты считаешь, что достаточно делать PeekMessage в *любом* потоке процесса, а не обязательно в главном (первом) потоке? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2019, 18:19 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovОдин юнит размером в три экрана, который выполняет любую процедуру в фоне, сопровождая это модальным окном прогресса. А смысл? Ну то есть вот есть некий запрос, который открывается десять секунд. В чём преимущество открывать его в фоне, закрыв модальным окном, по сравнению с crSQLWait в основном потоке? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2019, 18:29 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
Dimitry Timokhov, правильно, но хоть какое-то окно должно быть видимо, так как кто-то должен обрабатывать сообщения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2019, 18:34 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
softwarerА смысл? Ну то есть вот есть некий запрос, который открывается десять секунд. В чём преимущество открывать его в фоне, закрыв модальным окном, по сравнению с crSQLWait в основном потоке? Не мне, но предположу. Так все равно же в "(не отвечает)" впадает главная форма. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2019, 18:38 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
Dimitry TimokhovТак все равно же в "(не отвечает)" впадает главная форма. Для этого нужно куда больше времени. Столько, что и в форме "модального окна с прогрессом" пользователя не устроит (во всяком случае, меня бы не устроило). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2019, 18:45 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan), Василий 2, В общем проверил: 1. Создал окно на WinAPI (выбрал из другого своего проекта). Оно живое, обрабатывает очередь. Даже перерисовывается. 2. Все равно - через 5 сек в главном окне появляется "(не отвечает)". Вывод - Windows анализирует очередь главного (первого) потока. А не всех, которые принадлежат процессу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2019, 18:52 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
softwarerНу то есть вот есть некий запрос, который открывается десять секунд. В чём преимущество открывать его в фоне, закрыв модальным окном, по сравнению с crSQLWait в основном потоке? 1) Приложение не впадает в статус "Не отвечает", как уже сказали. 2) Окна не становятся белыми если провести над ними другое окно (переключиться на другое приложение). Что, собственно, следствие п.1. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2019, 18:52 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
softwarerпо сравнению с crSQLWait в основном потоке? А если ты имеешь ввиду запустить запрос в фоне, а в главном потоке всего лишь сменить курсор, то это, конечно, тоже неплохо, но придётся отдельно заботиться о том, чтобы пользователь этим курсором не тыкал куда не надо. А мне лень. ShowModal отбивает возможность "потыкать" автоматически. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2019, 19:03 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov1) Приложение не впадает в статус 2) Окна не становятся белыми Ясно. Мне эти соображения представляются важными, когда время открытия запроса измеряется минутами. Ради секунд я не стал бы заморачиваться. За десять секунд условный пользователь не особо успеет переключиться в другое приложение, схватить его окно и начать таскать над первым даже если предположить, что ему вдруг зачем-то понадобилось это сделать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2019, 19:35 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
Dimitry Timokhovkealon(Ruslan), Василий 2, В общем проверил: 1. Создал окно на WinAPI (выбрал из другого своего проекта). Оно живое, обрабатывает очередь. Даже перерисовывается. 2. Все равно - через 5 сек в главном окне появляется "(не отвечает)". Вывод - Windows анализирует очередь главного (первого) потока. А не всех, которые принадлежат процессу. Любопытно, хотя и странно. Какое дело Винде, какой там из потоков главный... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2019, 11:30 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
Василий 2Dimitry Timokhovkealon(Ruslan), Василий 2, В общем проверил: 1. Создал окно на WinAPI (выбрал из другого своего проекта). Оно живое, обрабатывает очередь. Даже перерисовывается. 2. Все равно - через 5 сек в главном окне появляется "(не отвечает)". Вывод - Windows анализирует очередь главного (первого) потока. А не всех, которые принадлежат процессу. Любопытно, хотя и странно. Какое дело Винде, какой там из потоков главный... Чем больше думаю про эти ghost-окна, тем больше понимаю, что сделано в Windows все логично. Будь у приложения 1000 потоков, Винда "ляжет" в цикле проверять их все. Поэтому проверяет только очередь основного потока и порожденные им окна. Видимо предполагается, что основной поток <=> главное окно. Хотя Windows могли бы лучше это все задокументировать. ИМХО. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2019, 12:23 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
11.07.2019 12:23, Dimitry Timokhov пишет: > Видимо предполагается, что основной поток <=> главное окно. > Хотя Windows могли бы лучше это все задокументировать. ИМХО. Код: pascal 1. 2. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2019, 12:33 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
Василий 2Dimitry Timokhovkealon(Ruslan), Василий 2, В общем проверил: 1. Создал окно на WinAPI (выбрал из другого своего проекта). Оно живое, обрабатывает очередь. Даже перерисовывается. 2. Все равно - через 5 сек в главном окне появляется "(не отвечает)". Вывод - Windows анализирует очередь главного (первого) потока. А не всех, которые принадлежат процессу. Любопытно, хотя и странно. Какое дело Винде, какой там из потоков главный...тогда скорее всего проверяются все главные окна через SendMessageTimeOut, это логично бы было ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2019, 12:49 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
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, то вообще все мрет. А с гостом хоть отрисовывается и показывает, что "(не отвечает)". Т.е. имитация жизни))) И дает надежду, что отомрет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2019, 13:01 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
Dimitry Timokhov, странно, попытался завесить окно с помощью Sleep (кнопка Test), не выходит заморозка Win10 Home "New win" окно в новом потоке откроет, т.е. повесить можно любой из потоков, приложение закроется когда все окна будут закрыты тынц ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2019, 13:15 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)странно, попытался завесить окно с помощью Sleep (кнопка Test), не выходит заморозка "Exe" это, конечно, круто))) Но только после того, как пол литра хотя бы вместе выпьем)) Тыкал на шапку главной формы? В ghost вообще *может* (видимо) не впадать, если запустил и ждешь. Но если тыкнешь на главную форму, то сразу впадет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2019, 13:19 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
Dimitry Timokhov, нефига не впадает PS: есть же виртуалки если боишься, но могу заверить что там ничего нет, это тестовое приложение для WinAPI. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2019, 13:22 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakovпридётся отдельно заботиться о том, чтобы пользователь этим курсором не тыкал куда не надо. А мне лень. ShowModal отбивает возможность "потыкать" автоматическимне тоже лень сделать красиво, потому просто дизаблю главную форму, оставляя возможность потаскать окно сплэша-прогресса (даже не модальное) и ткнуть в нем кнопку отмены, при наведении мыши на к-ю часики меняются на обычный курсор ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2019, 13:29 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)нефига не впадает PS: есть же виртуалки если боишься, но могу заверить что там ничего нет, это тестовое приложение для WinAPI. 1. По виртуалки. Но на моем HP ProBook 450 G5, если в биосе включить виртуализацию, то он грузится по 40 минут. Видимо, глюк. Но я так и не собрался в сервис сносить... Сижу без виртуалки. 2. Ок. Этап поллитры для пропустим)) Посмотрел. Не претендую на исходники. Понимаю, что тестовое приложение с кучей ценных фишек)) 3. Что делаю: а. Запустил. б. Нажал "Test" в. Сразу кликнул на шапку - ноль реакции (потаскать тоже нельзя). г. Подождал 5 сек и кликнул на шапке => "(не отвечает)", можно таскать. Сделал аналог, только открыл несколько форм. На каждой через 5 сек получаю "(не отвечает)". Win 10 Pro 64-бита Я немного запутался. Правильно понимаю, что ты хочешь сказать, что любое окно можно повесить? Ну собсно, я вроде не отрицал. Я говорил, что если есть еще одно *живое* окно в еще одном потоке, то это не будет препятствовать главному окну впасть в "(не отвечает)". Т.е. проверил совет 21924358 Вывод - Windows проверяет очередь каждого потока и анализирует необходимость впадать в "(не отвечает)" для окно этого потока. ЗЫ Кода не видел твоего. Может я что-то неверно понял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2019, 13:43 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
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. только оказывается и первое окно не в главном потоке :-( Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. а в главном консоль выходит ладно, нету времени тест дорабатывать, завтра попробую потестить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2019, 13:53 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)ладно, нету времени тест дорабатывать, завтра попробую потестить Тут скорее интерес теоретический. Ибо, похоже, все же надо писать программы так, чтобы не было "(не отвечает)". А то введет Windows вообще репрессии в будущем - десктопные приложения не имеют права засыпать больше, чем на 5 секунд. Не зря MSDN так скупо тему описывает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2019, 13:58 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
Мимопроходящий Код: pascal 1. 2. Это вот эта шняга с SO имеется в виду? Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2019, 14:03 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
В общем, получается, что безопаснее всего вызывать долгие операции в фоне, а в главном потоке показывать модальный прогресс-бар, блокируя главную форму (если эти операции не рассчитаны на отправку в фон). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2019, 14:11 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
Василий 2В общем, получается, что безопаснее всего вызывать долгие операции в фоне, а в главном потоке показывать модальный прогресс-бар, блокируя главную форму (если эти операции не рассчитаны на отправку в фон). Модальности можно избежать, если делать интерфейс на action-ах. Тут можно вспомнить недавний разговор про статусбары :) В наиболее полном виде я сделал такую систему в одном из проектов, там было так: - действие по умолчанию блокировало все прочие (action-ы дисейблились) - действие могло быть прерываемым (в статусбар выводилась кнопка break) - действие могло сообщать информацию о прогрессе (в статусбар выводился прогрессбар) - действие могло сообщать название выполняемой стадии (выводилось либо в статусбар, либо в отдельном псевдомодальном окне в зависимости от важности операции. В качестве бонуса - пока выполнялось это действие, можно было скроллировать карту в главном окне, менять масштаб и делать прочие безобидные вещи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2019, 14:51 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
Пользуюсь DisableProcessWindowsGhosting и все ок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2019, 14:52 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
Василий 2В общем, получается, что безопаснее всего вызывать долгие операции в фоне, а в главном потоке показывать модальный прогресс-бар, блокируя главную форму (если эти операции не рассчитаны на отправку в фон). Походу, именно так. Другой вопрос, что просто оправить свои алгоритмы (без обращения к БД) в фон - это легко. Другой вопрос, что в фон надо отправить обращение к БД. А вот тут вопрос, как делать. Я, вот, ADODB пользуюсь. Насколько я понимаю, там потоковая модель Both. Но работаю с ней как STA (сама дельфа вызывает за меня CoInitialize) Т.е. если мелочь миллисекундная по обращению к БД идет из главного потока, а отчеты надо делать из доп. потока... то не понятно, как обращаться к ADODB - нельзя же из разных потоков. Или можно? Сколько ни пытаюсь эти STA/MTA понять, все никак... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2019, 15:09 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
rgreatПользуюсь DisableProcessWindowsGhosting и все ок. У меня пользователи сами распараллеливают свою работу: 2-3 клиента запускают. В одном вводят, в другом - отчеты считают. После вызова DisableProcessWindowsGhosting приложение наглухо гаснет - ни мышкой не достанешь, ни ALT+TAB... Будет паника - все повисло, караул!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2019, 15:11 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
Dimitry Timokhov, Там гже пользуюсь у меня приложение гарантированно одно. Через мютекс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2019, 15:27 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
Ну и "Пожалуйста подождите." всегда надо в нужных моментах пользователю писать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2019, 15:28 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
С обственно это ленивое решение проблемы, которую по хорошему надо решать выносом кода в отдельные от GUI потоки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2019, 15:30 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
rgreatТам гже пользуюсь у меня приложение гарантированно одно. Через мютекс. ну все равно имхо не айс: 1. запустил приложение твой пользователь 2. при запуске ты вызвал DisableProcessWindowsGhosting 3. пользователь запустил отчет. 4. пошел почту проверить в браузере. 5. а в приложение не вернешься уже...пока отчет не выполнится до конца. полное ощущение "зависа"... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2019, 15:30 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
Dimitry Timokhov3. пользователь запустил отчет. 4. пошел почту проверить в браузере. 5. а в приложение не вернешься уже...пока отчет не выполнится до конца. полное ощущение "зависа"... Если пользователя заранее предупредить что мол "ждите" - ничего страшного не будет. И уж точно это лучше чем если пользователь "случайно" закроет работающую Ghost форму. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2019, 15:32 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
И не забываем и о других глюках которые возможны если юзер будет всячески кликать и таскать Ghost формы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2019, 15:37 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
Dimitry Timokhovв фон надо отправить обращение к БД. А вот тут вопрос, как делатькак вариант писать свои обертки к-е прозрачно перенесут все обращения к бд в поток, само клиентское приложение в местах открытия датасетов трогать не придется ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2019, 15:39 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
Dimitry TimokhovВасилий 2В общем, получается, что безопаснее всего вызывать долгие операции в фоне, а в главном потоке показывать модальный прогресс-бар, блокируя главную форму (если эти операции не рассчитаны на отправку в фон). Походу, именно так. Другой вопрос, что просто оправить свои алгоритмы (без обращения к БД) в фон - это легко. Другой вопрос, что в фон надо отправить обращение к БД. А вот тут вопрос, как делать. Я, вот, ADODB пользуюсь. Насколько я понимаю, там потоковая модель Both. Но работаю с ней как STA (сама дельфа вызывает за меня CoInitialize) Т.е. если мелочь миллисекундная по обращению к БД идет из главного потока, а отчеты надо делать из доп. потока... то не понятно, как обращаться к ADODB - нельзя же из разных потоков. Или можно? Сколько ни пытаюсь эти STA/MTA понять, все никак...COINIT_MULTITHREADED = 0; // OLE calls objects on any thread. но там скорее всего на гуи обвязка от VCL, либо напрямую с интерфейсами работать либо очень осторожно в обход расставленных граблей, и так швах и так швах выходит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2019, 15:41 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
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? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2019, 15:55 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
Dimitry Timokhovkealon(Ruslan)COINIT_MULTITHREADED = 0; // OLE calls objects on any thread. Но это, насколько понимаю, надо само мое приложение в таком режиме запустить и все потоки тоже, чтобы они попали в один MTA. Если с потоками понятно - CoInitializeEx(COINIT_MULTITHREADED) - то, что делать с главным потоком, чтобы он тоже попал в MTA? Нашел ComObj.CoInitFlags - оно?каждый поток создающий объекты, которые могут использоваться в других потоках должен вызывать CoInitializeEx(COINIT_MULTITHREADED) вложенный запуск тоже поддерживается, т.е. достаточно например при старте формы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2019, 16:02 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
Dimitry Timokhovчто делать с главным потоком, чтобы он тоже попал в MTA?это иногда путь к потенциальным траблам к сожалению ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2019, 16:11 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
Dimitry Timokhovу меня от VCL используется только совсем база, без которой нельзя. Никакими датабазными компонентами не пользуюсьподход в любом случае можно сохранить аналогичный, инициируя в месте "открытия"/загрузки ожидание завершения фактического обращения к бд в другом потоке, с прокруткой/обработкой цикла виндовых сообщений ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2019, 16:14 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
vavanподход в любом случае можно сохранить аналогичный, инициируя в месте "открытия"/загрузки ожидание завершения фактического обращения к бд в другом потоке, с прокруткой/обработкой цикла виндовых сообщений Ну о том, что так нельзя, весь топик, начиная с моего тут появления)) Если в другом потоке обрабатывать очередь (свою очередь - PeekMessage не может же обрабатывать очередь чужого потока!), то это не спасет первый поток и главную форму от впадения в ghost-режим. Вот 21924390 и вот 21924838 . Выход один - долгий запрос выводить в отдельный безоконный поток. А в главном крутить (обрабатывая очередь) прогресс или просто вывешивать форму. Ну и как-то научиться юзать AdoDb.Connection из этого отдельного потока, тогда как сам объект AdoDb.Connection был создан в главном потоке. Пойду про MTA почитаю:) Вот статья есть https://rsdn.org/?article/com/apartmnt.xml ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2019, 16:54 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
Dimitry Timokhovо том, что так нельзя, весь топик, начиная с моего тут появления)) Если в другом потоке обрабатывать очередьа я толкую про обработку в основном ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2019, 17:31 |
|
||
|
Параметр реестра HungAppTimeout
|
|||
|---|---|---|---|
|
#18+
Dimitry TimokhovНу и как-то научиться юзать AdoDb.Connection из этого отдельного потока, тогда как сам объект AdoDb.Connection был создан в главном потоке. Если там унутрях никаких своих ProcessMessages нету, то в принципе при условии полной блокировки обращения к БД со стороны главного потока не должно быть проблем при использовании connection из фонового потока ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2019, 20:03 |
|
||
|
|

start [/forum/topic.php?all=1&fid=58&tid=2039271]: |
0ms |
get settings: |
4ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
53ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
2ms |
| others: | 195ms |
| total: | 336ms |

| 0 / 0 |
