Главная страница
    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.49 MB
Время: 0.004 c
2-1290101441
Mitroshin
2010-11-18 20:30
2011.02.06
Старый исходник после компиляции в D2010 (оформление)


6-1233683745
Xandr
2009-02-03 20:55
2011.02.06
Почта


15-1287738749
istok
2010-10-22 13:12
2011.02.06
категории программ..


2-1290051713
Sergey
2010-11-18 06:41
2011.02.06
Как правильно читать и писать строки в поток?


2-1289796832
Василич
2010-11-15 07:53
2011.02.06
Обработка при прерывании программы.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский