powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Параметр реестра HungAppTimeout
25 сообщений из 78, страница 3 из 4
Параметр реестра 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
25 сообщений из 78, страница 3 из 4
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Параметр реестра HungAppTimeout
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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