Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.12.04;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.009 c
6-11682
adv
2003-10-03 13:56
2003.12.04
ClientSocket в Com объекте - срочно Help


8-11630
Саша2
2003-08-01 15:59
2003.12.04
avertv studio 203 -> delphi


4-11734
LOX
2003-10-07 18:20
2003.12.04
Как опредилить хендел активного окна?


8-11637
Bond 007
2003-08-04 11:37
2003.12.04
как цифровой сигнал просмотреть с помощью MMTOOLS


6-11685
Volcano
2003-10-04 17:12
2003.12.04
checksum