Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.02.06;
Скачать: CL | DM;

Вниз

Обработка при прерывании программы.   Найти похожие ветки 

 
Василич   (2010-11-15 07:53) [0]

Приветствую.

Ситуация такая: Выполняется программа, подгружаются 2 вордовских документа, все это перелопачивается, вдруг внезапно вылезает ошибка (или я сам останавливаю выполнение программы) - а 2 ворда остаются в памяти висеть, приходиться вручную снимать. Можно ли какой-нибудь обработчик написать для таких ситуаций, снимать ворды из ОЗУ?


 
И. Павел ©   (2010-11-15 08:01) [1]

Просто всю работу с вордами заключайте в секцию:
try
 <работа с Word>
finally
 <все OLE закрываем>
 <для всех ShellExec находим соответствующие вордовские окна и тоже их закрываем>
end;

Если работа с Word распределена по времени, то закрывать документы можно в OnException и OnClose.


 
Anatoly Podgoretsky ©   (2010-11-15 09:10) [2]

> Василич  (15.11.2010 07:53:00)  [0]

Ошибки надо обрабатывать.


 
12 ©   (2010-11-15 10:26) [3]

что-то типа


try
 ExcelApp := CreateOleObject("Excel.Application");
 ExcelApp.BLABLA;  
...
except
 on  E:EOleError do
 begin
   if Pointer(IDispatch(ExcelApp)) <> nil then ExcelApp.quit;
   E.Message := E.Message + " unit бла-бла, процедура бла-бла";
   Raise;
 end;
end;

?


 
Василич   (2010-11-15 13:06) [4]

Кхм, этих try..except придеться кучу ставить по всей программе... Да и сомневаюсь что они сработают. Допустим прога уже инициализиаровала олеобъекты, они исправно работают, тут я делаю брейк (CTRL+F2) - прога останавливается моментально, а ворды висят в памяти.  Жаль нельзя по событию сделать, onClose не то событие, это закрытие формы, а у меня break (CTRL+F2) или выдача ошибки.


 
Anatoly Podgoretsky ©   (2010-11-15 13:10) [5]

> Василич  (15.11.2010 13:06:04)  [4]

Программисту не положено бояться количества, боять надо кривонаписаных,
съэкономленых программ.


 
Сергей М. ©   (2010-11-15 13:12) [6]


> сомневаюсь что они сработают


Сомнения высосаны из пальца ?
Или есть серьезные основания для этих сомнений ?


 
И. Павел ©   (2010-11-15 13:16) [7]

> [4] Василич   (15.11.10 13:06)

Не сработает при жестком аварийном завершении, а CTRL + F4 - это просто закрытие окна - даже блокнот в этом случае сохранение предлагает.


 
Василич   (2010-11-15 18:52) [8]

И.Павел - да нет же, в самой делфе я нажимаю CTRL + F2 - что и ЕСТЬ жесткое аварийное завершение, прерывание программы.


 
Юрий Зотов ©   (2010-11-15 19:18) [9]


> Василич   (15.11.10 18:52) [8]

Вы путаете прерывание программы дебаггером и юзером. Это не одно и то же, так что все будет нормально.


 
Василич   (2010-11-15 19:35) [10]

CTRL+F2 - program reset. Поможет ли от него try..except?


 
Василич   (2010-11-15 19:36) [11]

Юрий Зотов, ок попробую try.


 
Дмитрий Белькевич   (2010-11-15 20:56) [12]


> CTRL+F2 - program reset. Поможет ли от него try..except?


У юзера контрола-эфдва нету.


 
Плохиш ©   (2010-11-15 21:23) [13]


> Василич   (15.11.10 19:35) [10]
>
> CTRL+F2 - program reset. Поможет ли от него try..except?
>

От этого никакие ухищрения в программе не помогут.

PS. Не с той проблемой паришься.


 
Плохиш ©   (2010-11-15 21:24) [14]


> Дмитрий Белькевич   (15.11.10 20:56) [12]
>
>
> > CTRL+F2 - program reset. Поможет ли от него try..except?
>
>
>
> У юзера контрола-эфдва нету.
>

У меня, как юзера, есть менеджер процессов, от него ваши ухищрения тоже не помогут.


 
Юрий Зотов ©   (2010-11-15 21:47) [15]


> Василич   (15.11.10 19:35) [10]
> CTRL+F2 - program reset. Поможет ли от него try..except?

Конечно не поможет. Программа же запущена из IDE и работает под управлением отладчика - он ее и прерывает.

Но ведь у юзера нет отладчика, не так ли? Он-то ведь этого сделать не сможет.


 
Германн ©   (2010-11-15 22:00) [16]


> У меня, как юзера, есть менеджер процессов, от него ваши
> ухищрения тоже не помогут.
>

Эт точно. :)


 
Leonid Troyanovsky ©   (2010-11-15 22:46) [17]


> Германн ©   (15.11.10 22:00) [16]

> Эт точно. :)

У нас - Диспетчер задач or Task manager у других.

--
Regards, LVT.


 
Германн ©   (2010-11-16 00:53) [18]


> Leonid Troyanovsky ©   (15.11.10 22:46) [17]

В отличие от вас с Плохишом я практически не знаю немецкий. Поэтому просто процитировал Плохиша, не обращая внимания на тонкости перевода. :)

P.S.
<offtop>
В плане общей терминологии меня больше заинтересовала вот эта заметка:
http://www.transl-gunsmoker.ru/2008/11/blog-post_4239.html
Как же теперь грамотно формулировать вопрос про "там где часики"?
:)
</offtop>


 
Василич   (2010-11-16 05:50) [19]

Моя программа не нужна юзерам, она не для широкого круга, только для меня, я и юзер, и кодер, и тестер и все остальное. Ну как и думал, что try не поможет, просто была маленькая надежда что есть какая-то маленькая лазейка для фикса этой неудобности ;) Всем привет и спасибо.


 
Плохиш ©   (2010-11-16 13:25) [20]


> просто была маленькая надежда что есть какая-то маленькая
> лазейка для фикса этой неудобности

Подумай, много ли ты успеешь выполнить действий после выстрела в голову?


 
Дмитрий Белькевич   (2010-11-16 19:00) [21]


> У меня, как юзера, есть менеджер процессов, от него ваши
> ухищрения тоже не помогут.


У тебя, как у юзера не должно быть прав на менеджер процессов. А если есть - то админу по рукам. А если ты сам и админ - то сам себе злой буратино.



Страницы: 1 вся ветка

Текущий архив: 2011.02.06;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.009 c
2-1289810551
Евгений07
2010-11-15 11:42
2011.02.06
наследование


15-1287138691
xayam
2010-10-15 14:31
2011.02.06
Чего выбрать из SSD?


2-1290061016
Study
2010-11-18 09:16
2011.02.06
Графика


6-1233941498
FireMan_Alexey
2009-02-06 20:31
2011.02.06
По какому протоколу ИЕ автоматически определяет настройки прокси?


2-1290080637
noob_one
2010-11-18 14:43
2011.02.06
Как добавить свою строчку в меню, которое появляется по