![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Дополнительный поток и Exception в главном. Что будет?
Kolan © (2006-10-15 22:43:00)Здравствуйте,
В программе есть доп поток. Что будет с доп. потоком если в гл. потоке произойдетException?
Kolan (2006-10-16 00:37:00) [81]
> оттого и сумбур. %-)
Ну тебя. Ну не могу я понять...
Почему послеSynchronize(SendPackage);доп поток чего-то ждет?
Вот передал он скрытому окну сообщениеCM_EXECPROCи свой метод. И сё чего еще ждать?
Почему если вSendPackageисключение - обработанное, то с доп потоком что-то случается.
Leonid Troyanovsky (2006-10-16 00:32:00) [82]
> Kolan © (16.10.06 00:23) [48]
> Вопрос: А если обрабатываются?
Без re-raise?
Тогда, как обычно, как будто их вовсе нет.
--
Regards, LVT.
PS
http://groups.google.com/group/fido7.ru.delphi/msg/d9a27ed6dbccaf7f
Ketmar (2006-10-16 00:31:00) [83]>[49] Kolan(c) 16-Oct-2006, 00:25
>Читать могу хоть сто раз. Пока не пойму на что обратить
>внимание не разберусь :(.
тогда заучи. чтобы даже во сне отбарабанивал. озарение само придёт. %-)
зыж это я засыпаю уже. вторые сутки. или третьи? оттого и сумбур. %-)
Kolan (2006-10-16 00:25:00) [84]
> ну почитай ты генофонд, а? %-)
Читать могу хоть сто раз. Пока не пойму на что обратить внимание не разберусь :(.
PS
Я знаю что я тупой. :)
Kolan (2006-10-16 00:23:00) [85]
> Ну, если они не обрабатываются в том самом методе,
> то должны быть обработаны в потоке, вызвавшем Synchronize.
>
Так усвоил.
Однако, если в этом потоке возникла нужда в к.л. показе, то оный
должен быть, опять же, в Synchronize (но, видимо, в ином).
Тоже дошло.
> Ну, если они не обрабатываются в том самом методе,
Вопрос: А если обрабатываются?
Result := TPackage.Create;
try
SeparateHeaderAndUserDtaArrays(Package, Header, UserData);
except
Result.Free;
end;
Ketmar (2006-10-16 00:20:00) [86]>[46] Kolan(c) 16-Oct-2006, 00:19
>Synchroonize. Ну как бы ... а что я должен был понять?
а я откуда знаю? %-)
Kolan (2006-10-16 00:19:00) [87]
> ну почитай ты генофонд, а? %-)
Генофонд ниасилю. А вот Тейктеру и Пачеко перечитал про Synchroonize. Ну как бы ... а что я должен был понять?
Leonid Troyanovsky (2006-10-16 00:17:00) [88]
> Kolan © (16.10.06 00:10) [43]
> > Показывать же надо через Synchronize.
> Ни че не пойму. В потоке исключения не возникают. Они возникают
> в методе, вызванном через Synchronize.
Ну, если они не обрабатываются в том самом методе,
то должны быть обработаны в потоке, вызвавшем Synchronize.
Однако, если в этом потоке возникла нужда в к.л. показе, то оный
должен быть, опять же, в Synchronize (но, видимо, в ином).
--
Regards, LVT.
Ketmar (2006-10-16 00:12:00) [89]>[43] Kolan(c) 16-Oct-2006, 00:10
ну почитай ты генофонд, а? %-)
Kolan (2006-10-16 00:10:00) [90]
> Показывать же надо через Synchronize.
Ни че не пойму. В потоке исключения не возникают. Они возникают в методе, вызванном черезSynchronize. Те так как вы говорите, а это приводит к [17]
Leonid Troyanovsky (2006-10-16 00:07:00) [91]
> Kolan © (16.10.06 00:03) [41]
> Сейчас показываю для отладки.
Показывать же надо через Synchronize.
--
Regards, LVT.
Leonid Troyanovsky (2006-10-16 00:03:00) [92]
> Percent (15.10.06 23:58) [38]
Зря ты не регистрируешься.
Ну, ладно, иду спать.
--
Regards, LVT.
Kolan (2006-10-16 00:03:00) [93]
> Ему и показывать-то ничего не надо, оказывается... "Показать
> сообщение - не цель" (С) Kolan
Да не цель, я по исключению что-то сделаю, отреагирую так сказать.
Сейчас показываю для отладки.
Kolan (2006-10-16 00:02:00) [94]
> А зачем заводить?
> Первичный поток вполне справится с их обработкой.
> Бо, в большинстве это - показ исключения.
Ну и я так думал. Сдеал серию событий. И получилось что в итоге у меня вSynchronize(SendPackage);все нчиная от обработки пакета, до вычисления данных и рисования на чарте. Гы, и работает :) Если без исключений.
Так а как сделать в главном?
> вроде того.
Тогда в итоге в этом потоке "обработки" я все обработаю и через Synchronize вызову событие, которое приведет к рисованию на чарте. Это ничего?
Percent (2006-10-15 23:58:00) [95]в большинстве это - показ исключения.
Ему и показывать-то ничего не надо, оказывается... "Показать сообщение - не цель" (С) Kolan
Leonid Troyanovsky (2006-10-15 23:56:00) [96]
> Kolan © (15.10.06 23:53) [34]
> Те завожу поток "Обработки". Когда происходит событие
А зачем заводить?
Первичный поток вполне справится с их обработкой.
Бо, в большинстве это - показ исключения.
--
Regards, LVT.
Kolan (2006-10-15 23:56:00) [97]
> Тогда зачем генерить исключение?
Я неправильно выразился. Не с обработкой, а с прекращением выполнения SendPackage и отправкой сообщения о том что есть что обрабатывать
> что-то вы, барин, намудрили. может, перепроектировать, пока
> не поздно?
Да тут мудрить вроде нечего. Перепроектирую наверно но не много..
Этот TConnectionManager имеет 1 метод - послать и 1 событие-пришли данные. Оч. удобно, я его много где использовал...
Ketmar (2006-10-15 23:54:00) [98]вроде того.
Kolan (2006-10-15 23:53:00) [99]
> поработаешь. завести ещё один поток. у потока тоже есть
> очередь сообщений. %-)
Только об этом подумал, тогда у меня вообще вся обработка будет в потоке, так?
Те завожу поток "Обработки". Когда происходит событие
procedure TConnectionManager.PackageReceivedEvent(Sender: TObject;
Package: array of Byte);
Я сохраняю пакетик и посылаю потоку сообщение, он берет пакет и делает свои дела.
Вроде нормально?
+ синхронизация.
Percent (2006-10-15 23:52:00) [100]Дальше TConnectionManager ничего не должно пойти, он должен сам справится с обработкой пакета....
Тогда зачем генерить исключение?