Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3 4   вперед  Ctrl      все
 Re: Параметр реестра HungAppTimeout  [new]
Dimitry Timokhov
Member

Откуда: Москва
Сообщений: 33
Dimitry Sibiryakov, когда сами MS исправят свой Excel (у меня 365) так, что при открытии больших-больших файлов в шапке не показывается "(не отвечает)", тогда и я поправлю))))

Совет хороший и правильный. Учту!
9 июл 19, 18:51    [21923725]     Ответить | Цитировать Сообщить модератору
 Re: Параметр реестра HungAppTimeout  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48425

Круговая порука рукожопов, да простит меня Рустам...

Posted via ActualForum NNTP Server 1.5

9 июл 19, 18:55    [21923726]     Ответить | Цитировать Сообщить модератору
 Re: Параметр реестра HungAppTimeout  [new]
Dimitry Timokhov
Member

Откуда: Москва
Сообщений: 33
Dimitry Sibiryakov, полностью поддерживаю - Excel'ю 30 лет, а никак в отдельный потом загрузку не вынесут. И пресловутую ошибку с _FilterDatabase до сих пор не исправят, и не сделают штатную возможность выставления ширины колонок в миллиметрах...

Но также интересно, неужели в программах Дмитрия Сибирякова весь ввод/вывод вынесен в отдельный поток? И даже из файлов чтение в отдельном потоке (там тоже может подвиснуть внешнее устройство)? И с БД работа вся асинхронная?
9 июл 19, 19:08    [21923735]     Ответить | Цитировать Сообщить модератору
 Re: Параметр реестра HungAppTimeout  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48425

Dimitry Timokhov
И с БД работа вся асинхронная?

Ты не поверишь...

Posted via ActualForum NNTP Server 1.5

9 июл 19, 19:13    [21923742]     Ответить | Цитировать Сообщить модератору
 Re: Параметр реестра HungAppTimeout  [new]
Dimitry Timokhov
Member

Откуда: Москва
Сообщений: 33
Dimitry Sibiryakov, у меня нет оснований тебе не верить.

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

Интересно, что у тебя за приложение, в котором тотальное асинхронное общение с БД? Что за тип приложения? Чем технически это делаешь? Своя библиотека или штатными средствами Delphi пользуешься? Расскажи, плз, интересно же. Первый раз встречаю приложение на Delphi с полностью асинхронным взаимодействием с БД.
9 июл 19, 20:55    [21923791]     Ответить | Цитировать Сообщить модератору
 Re: Параметр реестра HungAppTimeout  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48425

Dimitry Timokhov
Чем технически это делаешь?

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

И нет, эта асинхронность не тотальна. Запросы-однострочники для выборки-изменения одной
записи (каковых в логике подавляющее большинство) идут синхронно.

Posted via ActualForum NNTP Server 1.5

9 июл 19, 21:12    [21923796]     Ответить | Цитировать Сообщить модератору
 Re: Параметр реестра HungAppTimeout  [new]
Dimitry Timokhov
Member

Откуда: Москва
Сообщений: 33
Dimitry Sibiryakov
Dimitry Timokhov
Чем технически это делаешь?

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

А когда выполняешь любую процедуру (БД?) в фоне, чем к БД коннектишься?
И интересно, как прогресс определяешь?
9 июл 19, 21:34    [21923804]     Ответить | Цитировать Сообщить модератору
 Re: Параметр реестра HungAppTimeout  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48425

Dimitry Timokhov
А когда выполняешь любую процедуру (БД?) в фоне, чем к БД коннектишься?

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

Posted via ActualForum NNTP Server 1.5

9 июл 19, 22:10    [21923818]     Ответить | Цитировать Сообщить модератору
 Re: Параметр реестра HungAppTimeout  [new]
Dimitry Timokhov
Member

Откуда: Москва
Сообщений: 33
Dimitry Sibiryakov
Dimitry Timokhov
А когда выполняешь любую процедуру (БД?) в фоне, чем к БД коннектишься?

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


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

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

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

Собственно, поэтому и влез в топик. Чтобы понять и разобраться с режимом Ghost, в который Windows принудительно переводит любое приложение через 5 сек, если то не вызывает PeekMessage или аналоги.
9 июл 19, 22:49    [21923839]     Ответить | Цитировать Сообщить модератору
 Re: Параметр реестра HungAppTimeout  [new]
Василий 2
Member

Откуда:
Сообщений: 757
Dimitry Timokhov
Чтобы понять и разобраться с режимом Ghost, в который Windows принудительно переводит любое приложение через 5 сек, если то не вызывает PeekMessage или аналоги.

Собственно, если проверяется просто вызов Peek/GetMessage, то запуск фонового потока, создающего невидимое окно и таймер и крутящего цикл выборки сообщений, решит проблему "призракизации". А если это окно будет видимо, и будет показывать симпатичную анимашку или просто прогресс-бар, так совсем хорошо
10 июл 19, 18:08    [21924358]     Ответить | Цитировать Сообщить модератору
 Re: Параметр реестра HungAppTimeout  [new]
Василий 2
Member

Откуда:
Сообщений: 757
Только никакого VCL в фоновом потоке! Только WinAPI. Если CreateWindow слишком лениво, то помогут диалоги из ресурсов
10 июл 19, 18:09    [21924360]     Ответить | Цитировать Сообщить модератору
 Re: Параметр реестра HungAppTimeout  [new]
Dimitry Timokhov
Member

Откуда: Москва
Сообщений: 33
Василий 2
Dimitry Timokhov
Чтобы понять и разобраться с режимом Ghost, в который Windows принудительно переводит любое приложение через 5 сек, если то не вызывает PeekMessage или аналоги.

Собственно, если проверяется просто вызов Peek/GetMessage, то запуск фонового потока, создающего невидимое окно и таймер и крутящего цикл выборки сообщений, решит проблему "призракизации". А если это окно будет видимо, и будет показывать симпатичную анимашку или просто прогресс-бар, так совсем хорошо


Погоди))

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

Иными словами, ты считаешь, что достаточно делать PeekMessage в *любом* потоке процесса, а не обязательно в главном (первом) потоке?
10 июл 19, 18:19    [21924370]     Ответить | Цитировать Сообщить модератору
 Re: Параметр реестра HungAppTimeout  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 58951
Блог
Dimitry Sibiryakov
Один юнит размером в три экрана, который выполняет любую процедуру в фоне, сопровождая это модальным окном прогресса.

А смысл? Ну то есть вот есть некий запрос, который открывается десять секунд. В чём преимущество открывать его в фоне, закрыв модальным окном, по сравнению с crSQLWait в основном потоке?
10 июл 19, 18:29    [21924374]     Ответить | Цитировать Сообщить модератору
 Re: Параметр реестра HungAppTimeout  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 5215
Dimitry Timokhov,

правильно, но хоть какое-то окно должно быть видимо, так как кто-то должен обрабатывать сообщения
10 июл 19, 18:34    [21924375]     Ответить | Цитировать Сообщить модератору
 Re: Параметр реестра HungAppTimeout  [new]
Dimitry Timokhov
Member

Откуда: Москва
Сообщений: 33
softwarer
А смысл? Ну то есть вот есть некий запрос, который открывается десять секунд. В чём преимущество открывать его в фоне, закрыв модальным окном, по сравнению с crSQLWait в основном потоке?

Не мне, но предположу.
Так все равно же в "(не отвечает)" впадает главная форма.
10 июл 19, 18:38    [21924377]     Ответить | Цитировать Сообщить модератору
 Re: Параметр реестра HungAppTimeout  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 58951
Блог
Dimitry Timokhov
Так все равно же в "(не отвечает)" впадает главная форма.

Для этого нужно куда больше времени. Столько, что и в форме "модального окна с прогрессом" пользователя не устроит (во всяком случае, меня бы не устроило).
10 июл 19, 18:45    [21924385]     Ответить | Цитировать Сообщить модератору
 Re: Параметр реестра HungAppTimeout  [new]
Dimitry Timokhov
Member

Откуда: Москва
Сообщений: 33
kealon(Ruslan),
Василий 2,

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

Вывод - Windows анализирует очередь главного (первого) потока. А не всех, которые принадлежат процессу.
10 июл 19, 18:52    [21924390]     Ответить | Цитировать Сообщить модератору
 Re: Параметр реестра HungAppTimeout  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48425

softwarer
Ну то есть вот есть некий запрос, который открывается десять секунд. В чём преимущество
открывать его в фоне, закрыв модальным окном, по сравнению с crSQLWait в основном потоке?

1) Приложение не впадает в статус "Не отвечает", как уже сказали.
2) Окна не становятся белыми если провести над ними другое окно (переключиться на другое
приложение). Что, собственно, следствие п.1.

Posted via ActualForum NNTP Server 1.5

10 июл 19, 18:52    [21924391]     Ответить | Цитировать Сообщить модератору
 Re: Параметр реестра HungAppTimeout  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48425

softwarer
по сравнению с crSQLWait в основном потоке?

А если ты имеешь ввиду запустить запрос в фоне, а в главном потоке всего лишь сменить
курсор, то это, конечно, тоже неплохо, но придётся отдельно заботиться о том, чтобы
пользователь этим курсором не тыкал куда не надо. А мне лень. ShowModal отбивает
возможность "потыкать" автоматически.

Posted via ActualForum NNTP Server 1.5

10 июл 19, 19:03    [21924396]     Ответить | Цитировать Сообщить модератору
 Re: Параметр реестра HungAppTimeout  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 58951
Блог
Dimitry Sibiryakov
1) Приложение не впадает в статус
2) Окна не становятся белыми

Ясно. Мне эти соображения представляются важными, когда время открытия запроса измеряется минутами. Ради секунд я не стал бы заморачиваться. За десять секунд условный пользователь не особо успеет переключиться в другое приложение, схватить его окно и начать таскать над первым даже если предположить, что ему вдруг зачем-то понадобилось это сделать.
10 июл 19, 19:35    [21924406]     Ответить | Цитировать Сообщить модератору
 Re: Параметр реестра HungAppTimeout  [new]
Василий 2
Member

Откуда:
Сообщений: 757
Dimitry Timokhov
kealon(Ruslan),
Василий 2,

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

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

Любопытно, хотя и странно. Какое дело Винде, какой там из потоков главный...
11 июл 19, 11:30    [21924694]     Ответить | Цитировать Сообщить модератору
 Re: Параметр реестра HungAppTimeout  [new]
Dimitry Timokhov
Member

Откуда: Москва
Сообщений: 33
Василий 2
Dimitry Timokhov
kealon(Ruslan),
Василий 2,

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

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

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


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

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

Хотя Windows могли бы лучше это все задокументировать. ИМХО.
11 июл 19, 12:23    [21924765]     Ответить | Цитировать Сообщить модератору
 Re: Параметр реестра HungAppTimeout  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 30502

11.07.2019 12:23, Dimitry Timokhov пишет:
> Видимо предполагается, что основной поток <=> главное окно.
> Хотя Windows могли бы лучше это все задокументировать. ИМХО.

GetWindowThreadProcessId(hWindow, @PID);
if IsMainWindow(hWindow) then ...

Posted via ActualForum NNTP Server 1.5

11 июл 19, 12:33    [21924786]     Ответить | Цитировать Сообщить модератору
 Re: Параметр реестра HungAppTimeout  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 5215
Василий 2
Dimitry Timokhov
kealon(Ruslan),
Василий 2,

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

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

Любопытно, хотя и странно. Какое дело Винде, какой там из потоков главный...
тогда скорее всего проверяются все главные окна
через SendMessageTimeOut, это логично бы было
11 июл 19, 12:49    [21924805]     Ответить | Цитировать Сообщить модератору
 Re: Параметр реестра HungAppTimeout  [new]
Dimitry Timokhov
Member

Откуда: Москва
Сообщений: 33
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 июл 19, 13:01    [21924822]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3 4   вперед  Ctrl      все
Все форумы / Delphi Ответить