![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Правильно ли работаю с потоками? [D7, XP]
Lamer6666 © (2011-07-26 23:27:00)Доброго времени суток уважаемые!
Решаю следующую задачу, по таймеру получаю методом GET информацию. Данную задачу необходимо реализовать в потоке. Делаю так:
Описал тип
type
TKdServerThread = class(TThread)
private
Procedure GetIn;
protected
procedure execute; override;
end;
Процедура исполнения:
Procedure TKdServerThread.execute;
begin
Synchronize(GetIn);
end;
Выполняю нужный мне код:
Procedure TKdServerThread.GetIn;
begin
Try
Form1.Memo1.Lines.Add(IdHTTP99.Get('....'));
Except
End;
Application.ProcessMessages;
end;
Далее по таймеру запускаю потоки:
procedure TForm1.Timer1Timer(Sender: TObject);
var NewThread: TKdServerThread;
begin
NewThread:=TKdServerThread.Create(true);
NewThread.FreeOnTerminate:=true;
NewThread.Priority:=tpLowest;
NewThread.Resume;
end;
вопрос:
1. Правильно ли реализовано решение?
2. Что будет если один из потоков повиснет при выполнении метода GET, продолжат ли работу остальные потоки?
3. Как ограничить количество потоков, есть некий параметр показывающий кол-во работающих потоков, или нужно считать кол-во созданных потоков самому?
Огромное спасибо.
antonn (2011-07-28 11:18:00) [21]ну и включу КО, дабы помочь восстановить логическую цепочку, а то я смотрю некоторые читают только последнюю страницу.
[47] Игорь написал что игронирует те исключения в которых уверен (я в борланде тоже был уверен... :)), и если что - сломается с треском.
[48] если пложение в виде службы то мессаджбокс не увидим, а евентах (если самому ничего не делать дополнительного) будет что-то типа "Не найдено описание для события с кодом ( 0 ) в источнике ( ***** ). Возможно, на локальном компьютере нет нужных данных в реестре или файлов DLL с..". Т.е. чтобы уловить причину нужно ее отработать в этом случае. Потому что без try..except (даже пустой) приложение может вообще упасть, и без уведомлений почему она это сделала.
[49] Игорь говорит тоже самое на примере службы оракла - та пишет логи
[50] Господин в ярости блистает красноречием, отквотив [48] О_о
[56] Герман ставит плюсадин. Ты вообще с чем там хотел быть согласен, а?
antonn (2011-07-28 11:09:00) [22]
> необработанный/пустой ексепт с сообщением у юзера..
нужно читать сообщения выше
> или то что ты стебешся отстаивая "возможность" (приводя
> кривые примеры), т.к. "противная сторона" говорит "никогда
> и ни при каких обстоятельствах"...? ну так покажи где она
> это сказала,
[40]
читай возле выделенного, там есть все, там же есть вопрос - можешь ответить на него и написать почему на мои утверждения "что может быть" меня переубеждают "не может". Логическую нить сохраняем :)
sniknik (2011-07-28 08:13:00) [23]Удалено модератором
MonoLife (2011-07-28 07:32:00) [24]оставьте в покое antonn'a!:)
ТС с опытом поймет в чем был не прав и как нужно делать, а как не рекомендуется.. Для чего-то ж существуют грабли, тяпки & etc ...:)
antonn (2011-07-28 02:18:00) [25]
> Но тоже как любой технарь имею жизненный опыт техподдержки.
а то что sniknik не так понял мою фразу - это не важно? опыт техподдержки гораздо важнее, там важно быстро и точно ответить на вопрос который не задавался, молниеносно объяснить юзеру почему он не прав и что на самом деле у него все работает нормально :) "знаем, плавали"
Германн (2011-07-28 01:30:00) [26]Удалено модератором
antonn (2011-07-28 01:23:00) [27]
> Как заранее знать что критично, а что нет не будучи господом
> богом?
на этапе планирования, разумеется :) когда там ТЗ составляется?
> +1
ты бы прочитал [51], а то "плюсадинишь" и выглядишь глупо :)
Германн (2011-07-28 00:51:00) [28]Удалено модератором
Германн (2011-07-28 00:37:00) [29]Удалено модератором
antonn (2011-07-28 00:30:00) [30]Удалено модератором
Германн (2011-07-28 00:26:00) [31]Удалено модератором
Игорь Шевченко (2011-07-27 21:51:00) [32]antonn © (27.07.11 21:34) [51]
> я так понял что эти эксепшны не обрабатываются и потому
> вылезают "стандартные" диалоги ошибок?
Если ты мой пост [47] имеешь в виду, то стандартных диалогов не вылезает, потому что на верхнем уровне стоит обработчик необработанных исключений, который пишет журнал ошибок (а для сервисов и/или в EventLog) с трассировкой стека, последними выполненными действиями, еще набором всяких данных, и отсылает, если заказано, письмо со всей этой информацией на указанные адреса. Такой вот Error reporter в миниатюре.
Я имею в виду, что во внутренних процедурах исключения не игнорируются все скопом, а только те, которые в данном участке кода могут быть безболезненно проигнорированы. Неспецифических примеров сходу привести не могу :)
antonn (2011-07-27 21:34:00) [33]
> в службу поддержки тебя, на вразумление, после будешь знать
> этого "Никто"... в зеркале брить его будешь.
ну не злись, все хорошо :)
речь как раз о том что никто не увидит если это будет мессаджбокс из под system не на декстопе юзера. Ярость глазки залила, это небыло сказано в контексте "все равно никто не увидит" =))
> Игорь Шевченко © (27.07.11 21:05) [49]
>
>
> А вот оракл под виндой тоже служба, а при падениях пишет в EventLog и в свой Alert log. Потом есть что почитать.
я так понял что эти эксепшны не обрабатываются и потому вылезают "стандартные" диалоги ошибок?
sniknik (2011-07-27 21:13:00) [34]> никтож не увидит
в службу поддержки тебя, на вразумление, после будешь знать этого "Никто"... в зеркале брить его будешь.
Игорь Шевченко (2011-07-27 21:05:00) [35]
> а если служба, никтож не увидит
А вот оракл под виндой тоже служба, а при падениях пишет в EventLog и в свой Alert log. Потом есть что почитать.
antonn (2011-07-27 19:15:00) [36]
> Так пусть лучше сломается с треском.
а если служба, никтож не увидит
Игорь Шевченко (2011-07-27 19:12:00) [37]
> я высказался что такое решение омеет право на жизнь в зависимости
> от ситуации
Конечно имеет. В чужом коде все имеет право на жизнь. В своем я стараюсь обычно игнорировать только те исключения, в безопасности игнорирования которых я уверен.
Исключения-наследники EExternal или EHeapException, например, не игнорируются никогда. Я не уверен, что пишу безупречный код и тем более не уверен, что вызываемый мной сторонний код безупречен. Так пусть лучше сломается с треском.
antonn (2011-07-27 18:04:00) [38]
> Dennis I. Komarov © (27.07.11 17:58) [45]
>
>
> > какой именно?
>
> update
какой update?
> Реализуй различные режимы, при которых можно посмотреть
> некое отладочное окно, дабы после можно было получить действительно
> "нет доступа".
какое еще окно и кто в него будет смотреть? нет доступа для чего? мы сейчас обсуждаем пример с кешем? так юзеру вообще все равно где там нет доступа, а мне так же все равно есть ли кеш или нет. Если есть - хорошо, но не обязательно, лишний поклон перед юзером. Если нет - ну подождет до первого перерасчета данных, посмотрит на анимацию. Момент не критичный. Более того, в этом примере вообще нет обратной связи, поток вызывается и о нем, по сути, забываем.
Dennis I. Komarov (2011-07-27 17:58:00) [39]
> какой именно?
update
Dennis I. Komarov (2011-07-27 17:58:00) [40]И его? Если юзеру не надо видеть эту ошибку, то не показывай ее, но это не является основанием для того что-бы оставить пустой блок except. Реализуй различные режимы, при которых можно посмотреть некое отладочное окно, дабы после можно было получить действительно "нет доступа". Потому как иначе, кто-нить потом чего-нить оторвет...