Форум: "Сети";
Текущий архив: 2003.12.04;
Скачать: [xml.tar.bz2];
ВнизClientSocket в Com объекте - срочно Help Найти похожие ветки
← →
adv (2003-10-03 13:56) [0]Подскажите, плз: не получается сабж. ClientSocket открываю в потоке, тип сокета ctNonBlocking, при вызове Synchronize(ClientSocket.Open) Com объект умирает быстро и без писка. Проблема проявляется только при переносе модуля в COM объект- в обычном приложении все работает. Заранее спасибо всем откликнувшимся.
← →
Digitman (2003-10-03 14:00) [1]а зачем ? зачем синхронизировать метод ClientSocket.Open ? смысл ?
← →
adv (2003-10-03 14:45) [2]От безысходности :-(. Уже не знаю в чем проблема, вот и извращаюсь
← →
Polevi (2003-10-03 14:51) [3]цикл обработки сообщений есть в потоке ?
← →
Digitman (2003-10-03 14:59) [4]
> adv
для начала сделай так
procedure TMyThread.Execute;
begin
try
..... // здесь вся твоя кухня с гнездами и пр.
except
end;
end;
о результатах (падает COM-сервер после этого или перестал) доложишь)
← →
adv (2003-10-03 15:01) [5]нет. Назначение приложения - постоянный опрос сервера, если пришла инфа, парсить, заполнять свойства COM объекта, чтобы сторонняя прилада (SCADA) считала эту инфу. 2 потока - один на прием инфы от сервера, другой на обслугу запросов хозяина (SCADA), можно конечно половить сообщения и попробывать определиться с ошибкой, но мне кажется что это где то на поверхности. Может кто знает где копать. Повторюсь но в обычном приложении все ок
← →
Digitman (2003-10-03 15:14) [6]еще раз повторяю - ты заключил код Execute() в скобки try..except ? каков результат ?
← →
adv (2003-10-03 15:14) [7]все заработало, большой сенкс. а что это могло быть?
on E:Exception do MessageBox(0,PChar(E.Message),"Error",0);
ничего не дало. еще раз спасибо.
← →
Digitman (2003-10-03 15:32) [8]ну, положим, еще ничего не заработало)
ибо ты только обнаружил по моему настоянию, что COM-сервер твой падает из-за необработанного в потоке исключения
теперь - задача выяснить, кто или что является источником такого исключения ... и уж потом принимать адекв.меры
скорректируй код таким образом :
on E:Exception do
MessageBox(0,PChar( E.ClassName + " " + E.Message),"Error",0);
о том что ты увидишь в сообщении - доложишь дословно))
← →
adv (2003-10-06 04:29) [9]Да нет - заработало. А исключение
try Socket.open except on E:Exception do MessageBox(0,PChar(E.ClassName + " " + E.Message),"Error",0); end;
не ловит. Убрал Try except - работает. ничего больше не менял. ЧТО ЗА ??? Кстати подобное поведение обнаружил при попытке написать службу на Delphi (пришлось на VС писать), а еще он часто в обоих случаях валиться с исключением ядра D6. Это мой глюк или фича D6?
← →
Digitman (2003-10-06 08:14) [10]
> ЧТО ЗА
стук в подвале) .... что еще сказать ?
> при попытке написать службу на Delphi
а зачем ты организуешь в службе еще один доп.код.поток ? объясни
код службы и так уже выполняется в отдельном код.потоке
← →
adv (2003-10-06 08:53) [11]
> а зачем ты организуешь в службе еще один доп.код.поток ?
Хотел сделать: первый поток опрашивает сетевой ресурс на предмет появления новых файлов и переписывает их на локальный ресурс. Второй - рассылает обнаруженные файлы в локальном ресурсе по коннектам. А сама служба рулит потоками (лог ошибок, перезапуск потоков и прочее).
← →
Digitman (2003-10-06 09:16) [12]в принципе все это вполне организуемо и в рамках одного и того же потока службы...
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2003.12.04;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.003 c