|
|
|
Параметр реестра 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 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39836418&tid=2039271]: |
0ms |
get settings: |
8ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
179ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
69ms |
get tp. blocked users: |
2ms |
| others: | 245ms |
| total: | 545ms |

| 0 / 0 |
