![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Дополнительный поток и Exception в главном. Что будет?
Kolan © (2006-10-15 22:43:00)Здравствуйте,
В программе есть доп поток. Что будет с доп. потоком если в гл. потоке произойдетException?
Kolan (2006-10-15 23:06:00) [121]
> Does the flap of a butterfly’s wings in One Thread set off
> a tornado in Another Thread ?
>
Something like this :)
Kolan (2006-10-15 23:05:00) [122]Общий смысл который я понял при дебеге:
поток(пишу прям здесь если не то, то буду выбирать из реального кода):
while not Terminated do
begin
if ReadIndex >= WriteIndex then
begin
Suspend;
if Terminated then
begin
Break;
end;
Synchronize(SendPackage);
if (ReadIndex <> WriteIndex ) then
RearrangeBuffer;
end;
1. Если нет Exceptiona:
После Synchronize(SendPackage); показывается окно что типа все нормально(я же ошибку закометил). Нажав на "ОК" попадаю на точку: while not Terminated do.
2. С Exception После Synchronize(SendPackage); ничего(вообще) наwhile not Terminated doуже не попадает.
Закрываю - "Неверный дескриптор".
guav (2006-10-15 22:57:00) [123]Does the flap of a butterfly’s wings in One Thread set off a tornado in Another Thread ?
Kolan (2006-10-15 22:56:00) [124]
Synchronize(SendPackage);
Kolan (2006-10-15 22:56:00) [125]
> "не верю!" (ц) минимальный код, демонстрирующий эту аномалию
> -- в студию.
Шас
Percent (2006-10-15 22:55:00) [126]Далее обработанные данные отправляются в гл. поток.
Тема механизма передачи не озвучена...
Ketmar (2006-10-15 22:55:00) [127]"не верю!" (ц) минимальный код, демонстрирующий эту аномалию -- в студию.
Kolan (2006-10-15 22:54:00) [128]Система такая полученные данные обрабатываются в доп потоке. Как только обработка закончена он засыпает. Далее обработанные данные отправляются в гл. поток. В гл потоке я проверяю корректность 1 что делаю проверяю длину:
if Length(Package) < 13 then
raise EPackageWrongLength.Create(EPackageWrongLength.ClassName);
Так вот если длинна не верная, то:
Доходит до raise, но окно сообщением не появляется. Почему?
Зато при закрытии программы(точнее при удалении потока) выдает: "Неверный дескриптор" ...
Если Exception закаментить то все ок...
Ketmar (2006-10-15 22:51:00) [129]>[3] Leonid Troyanovsky(c) 15-Oct-2006, 22:47
>Зависит от плотности связи вторичного и первичного.
а, ну да. натурально. если независим -- будет работать. если чего от главного хочет... ну, не повезло тогда доппотоку. %-)
guav (2006-10-15 22:47:00) [130]> Что будет с доп. потоком если в гл. потоке произойдет Exception?
Ничего. Дальше полетит.
Ketmar (2006-10-15 22:47:00) [131]работать себе будет. пока программа не грохнется окончательно.
Leonid Troyanovsky (2006-10-15 22:47:00) [132]
> Kolan © (15.10.06 22:43)
> В программе есть доп поток. Что будет с доп. потоком если
> в гл. потоке произойдет Exception?
Зависит от плотности связи вторичного и первичного.
--
Regards, LVT.