Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

ClientSocket в Com объекте - срочно Help [D6, Win2k]


adv ©   (2003-10-03 13:56:00) 

Подскажите, плз: не получается сабж. ClientSocket открываю в потоке, тип сокета ctNonBlocking, при вызове Synchronize(ClientSocket.Open) Com объект умирает быстро и без писка. Проблема проявляется только при переносе модуля в COM объект- в обычном приложении все работает. Заранее спасибо всем откликнувшимся.


Digitman   (2003-10-06 09:16:00) [1]

в принципе все это вполне организуемо и в рамках одного и того же потока службы...


adv   (2003-10-06 08:53:00) [2]


> а зачем ты организуешь в службе еще один доп.код.поток ?

Хотел сделать: первый поток опрашивает сетевой ресурс на предмет появления новых файлов и переписывает их на локальный ресурс. Второй - рассылает обнаруженные файлы в локальном ресурсе по коннектам. А сама служба рулит потоками (лог ошибок, перезапуск потоков и прочее).


Digitman   (2003-10-06 08:14:00) [3]


> ЧТО ЗА


стук в подвале) .... что еще сказать ?


> при попытке написать службу на Delphi


а зачем ты организуешь в службе еще один доп.код.поток ? объясни
код службы и так уже выполняется в отдельном код.потоке


adv   (2003-10-06 04:29:00) [4]

Да нет - заработало. А исключение 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-03 15:32:00) [5]

ну, положим, еще ничего не заработало)
ибо ты только обнаружил по моему настоянию, что COM-сервер твой падает из-за необработанного в потоке исключения

теперь - задача выяснить, кто или что является источником такого исключения ... и уж потом принимать адекв.меры

скорректируй код таким образом :

on E:Exception do
MessageBox(0,PChar( E.ClassName+ " " + E.Message),"Error",0);

о том что ты увидишь в сообщении - доложишь дословно))


Digitman   (2003-10-03 15:14:00) [6]

еще раз повторяю - ты заключил код Execute() в скобки try..except ? каков результат ?


adv   (2003-10-03 15:14:00) [7]

все заработало, большой сенкс. а что это могло быть? on E:Exception do MessageBox(0,PChar(E.Message),"Error",0);ничего не дало. еще раз спасибо.


adv   (2003-10-03 15:01:00) [8]

нет. Назначение приложения - постоянный опрос сервера, если пришла инфа, парсить, заполнять свойства COM объекта, чтобы сторонняя прилада (SCADA) считала эту инфу. 2 потока - один на прием инфы от сервера, другой на обслугу запросов хозяина (SCADA), можно конечно половить сообщения и попробывать определиться с ошибкой, но мне кажется что это где то на поверхности. Может кто знает где копать. Повторюсь но в обычном приложении все ок


Digitman   (2003-10-03 14:59:00) [9]


> adv


для начала сделай так

procedure TMyThread.Execute;
begin
try
..... // здесь вся твоя кухня с гнездами и пр.
except
end;

end;

о результатах (падает COM-сервер после этого или перестал) доложишь)


Polevi   (2003-10-03 14:51:00) [10]

цикл обработки сообщений есть в потоке ?


adv   (2003-10-03 14:45:00) [11]

От безысходности :-(. Уже не знаю в чем проблема, вот и извращаюсь


Digitman   (2003-10-03 14:00:00) [12]

а зачем ? зачем синхронизировать метод ClientSocket.Open ? смысл ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо