2
ronin: код после конструкции Try.. Except..End тоже выполнится всегда - зачем finally? ^_^ И вообще, этот finally уж очень похож на войну с exception'ами. Или не понимаю его назначения... Вообще, никогда этот finally не пользовал, сейчас решил - получилось такое:
- Код: Выделить всё
-         Try
 Try
 For i := 0 To bProcesses.Count - 1 Do
 TProcess(bProcesses[i]).Terminate(3);
 bProcesses.Clear;
 For i := 0 To bCameras.Count Do
 Begin
 aCamera := BCameraClass(bCameras[i]);
 bProcesses.Add(BuildProcess(aCamera));
 End;
 Except On E: Exception Do
 SafeLog(E.Message);
 End;
 Finally
 bSession.Leave;
 End;
 
потом подумал - а зачем мне здесь finally? Переписал:
- Код: Выделить всё
 bSession.Enter;
 Try
 For i := 0 To bProcesses.Count - 1 Do
 TProcess(bProcesses[i]).Terminate(3);
 bProcesses.Clear;
 For i := 0 To bCameras.Count Do
 Begin
 aCamera := BCameraClass(bCameras[i]);
 bProcesses.Add(BuildProcess(aCamera));
 End;
 Except On E: Exception Do
 SafeLog(E.Message);
 End;
 bSession.Leave;
 
Ведь как понимаю, bSession.Leave вызовется в любом случае, значит и никакого отличия от варианта с Finally нет, а 3 строчки и, что важнее, отступ сэкономлены. Опять подумал - а зачем вообще нужен finally, если подобная конструкция функциональней и немногословней... И вот этот топик ^_^