Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Application.Active


Автор: stab 11.10.2003, 23:01
Application.Active работает прекрасно, но если приложение подвисло, т.е. какие-то длительные вычисления, то значение этого свойства не обновляется. Есть ли другой способ узнать активно приложение или нет?

Автор: <Spawn> 12.10.2003, 05:31
GetForegroundWindow, GetActiveWindow?

Автор: var-alex 12.10.2003, 09:17
Вынести вичисления в отдельный поток?? Вызывать application.processmessages в этих вычислениях?? И всё будет обновляться?

Автор: stab 12.10.2003, 21:26
Цитата
Вынести вичисления в отдельный поток?? Вызывать application.processmessages в этих вычислениях?? И всё будет обновляться?


млин, я о чем спрашивал-то? Есть ли другой способ узнать активно приложение или нет?

<Spawn>, сенкс, разобрался.

Автор: Vit 13.10.2003, 04:57
У меня эта задача стояла особенно остро примерно 4 года назад - представьте примерно 100 програм, работающих на 100 компьютерах. Программы навороченные - хрен-знает-сколько третьесторонних продуктов, коннект с несколькими сетями, серверами и т.п. В общем зависание очень даже возможно, даже не в моём коде, а в коде например репортинговой DLL, или чужого ActiveX, который получает данные с сети и т.п. Причём в определённом проценте случаев вешалась не только программа, но и весь компьютер... Я решил эту проблему так - каждая программа создавала на сетке в зашаренной папке файл нулевой длинны - этот файл я перезаписывал во всех циклах, до и после всех долгоиграющих процессов, для своей программы у меня были точные сведения что реже чем 1 раз в 5 минут такой файл перезаписываться не может - теперь отдельная программы проверяла возраст этого файла - если он оказывался больше 5 минут, то программа или компьютер повис и посылала email в группу сервиса, и пыталась перезагрузить компьютер. Эта система работает очень хорошо до сих пор.

Автор: stab 13.10.2003, 05:24
а у меня помимо основного потока есть еще один, он занимается тем что следит за состоянием программы (основного потока), повисла\не повисла, т.д., плюс иногда выводит статистику. Когда юзер работает в другой программе и ему на эту статистику положить не надо ее и показывать. Собственно из-за этого такая проблема и возникла.

Автор: iZZi 15.10.2003, 06:51
А как ты реализовал эти потоки? я в этом пока еще не разбирался, но интересно.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)