imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 03.05.2005, 17:46     # 1
PhoeniXX
Junior Member
 
Регистрация: 24.06.2003
Адрес: Ukraine,kherson
Сообщения: 65

PhoeniXX Путь к славе только начался
Question Delphi: Сокеты и Потоки

Здраствуйте.
У меня вопрос по поводу сокетов,
может на него уже отвечали,но я не нашел ответ(

Существует несколько потоков, каждый для определенного компьютера,в каждом потоке создаеться TelnetClient:TTnCnx компонент(Из набора ICS, для телнета), в самом потоке он соеденяеться и отправляет определенные данные.
А как заставить сам поток ждать завершения работы сокета?
Пробовал: WaitForSingleObject(TelnetClient.Socket.Handle,INFINITE);
и
TelnetClient.Socket.WaitForClose;
Оба варианта не помогли.Как лучше поступить в данной ситуации???
PhoeniXX вне форума  
Старый 04.05.2005, 09:58     # 2
/7y3uK
Advanced Member
 
Аватар для /7y3uK
 
Регистрация: 09.03.2004
Адрес: толстозадая Москва
Сообщения: 498

/7y3uK Реально крут(а)/7y3uK Реально крут(а)/7y3uK Реально крут(а)/7y3uK Реально крут(а)
ну сначала нужно почитать как устроены потоки
ну на пальцах чисто теоретически - вот ты запускаешь тред в котором у тебя идет прослушка сокета.... тред у тебя умрет в том случае когда выполнит все возложенные на него задачи (ну это правда не всегда так, но ориентироваться надо на это утверждение)... соответственно самый простой способ не дать умереть треду это организовать внутри него какой нить цикл по булевому флагу... ну а самое главное в тредах это понять как работает wait и notify - соответственно если ты собрался заставить тред ждать чего то - положи его в wait - разбудить его соответственно нужно будет дернуть notify.... Ну и самое важное - для равильного контроля за тредом нужно использовать обязательно синхронизированные методы... про синхронизацию тут был топик кстати с примером
__________________
В нашей стране настаивать на кореньях, черной смородине, лимонных корках - гораздо эффективнее, чем на правах
/7y3uK вне форума  
Старый 04.05.2005, 22:56     # 3
PhoeniXX
Junior Member
 
Регистрация: 24.06.2003
Адрес: Ukraine,kherson
Сообщения: 65

PhoeniXX Путь к славе только начался
Пасиба, но это немного не то.
Суть проблемы в том что сокет находиться с самом треде, и создаеться в рунтайме. И если я правильно поняо,если усыплять поток, то сокет тоже усыпляеться.
PhoeniXX вне форума  
Старый 05.05.2005, 09:46     # 4
/7y3uK
Advanced Member
 
Аватар для /7y3uK
 
Регистрация: 09.03.2004
Адрес: толстозадая Москва
Сообщения: 498

/7y3uK Реально крут(а)/7y3uK Реально крут(а)/7y3uK Реально крут(а)/7y3uK Реально крут(а)
Странно, себе обычно с сокетами по другому все представлял
открываются сокеты в основном потоке а слушает каждый сокет отдельный тред...
ну это не суть.... ну сделай еще один тред который будет тебе мониторить и будить если надо твой стред с сокетом...
__________________
В нашей стране настаивать на кореньях, черной смородине, лимонных корках - гораздо эффективнее, чем на правах
/7y3uK вне форума  
Старый 06.05.2005, 11:31     # 5
PhoeniXX
Junior Member
 
Регистрация: 24.06.2003
Адрес: Ukraine,kherson
Сообщения: 65

PhoeniXX Путь к славе только начался
Post

Допустим у меня для 5 компов - 5 тредов, и для каждого из них создавать по 1 проверяющему?, это слишком много, а если их будет 30?
Тем более, что вопрос в том и заключаеться,
если создавать проверяющий тред, его ж надо както притормаживать, или он опять будет использовать весь проц. А как раз в этом и проблема
PhoeniXX вне форума  
Старый 06.05.2005, 17:55     # 6
/7y3uK
Advanced Member
 
Аватар для /7y3uK
 
Регистрация: 09.03.2004
Адрес: толстозадая Москва
Сообщения: 498

/7y3uK Реально крут(а)/7y3uK Реально крут(а)/7y3uK Реально крут(а)/7y3uK Реально крут(а)
нет, я просто не могу понять зачем тебе открывать сокеты в отдельных тредах... сокеты серверные и так каждый в своем треде работает, т.е. сам тредами своими рулит - на то они и сокеты... серверный сокет не закроется до тех пор пока его слушает клиент...
__________________
В нашей стране настаивать на кореньях, черной смородине, лимонных корках - гораздо эффективнее, чем на правах
/7y3uK вне форума  
Старый 07.05.2005, 00:47     # 7
PhoeniXX
Junior Member
 
Регистрация: 24.06.2003
Адрес: Ukraine,kherson
Сообщения: 65

PhoeniXX Путь к славе только начался
у меня сокеты не серверный, а клиентские.
Суть простая, я незнаю что делать треду пока работает сокет, когда сокет закончит работу с этим компом, он сам сразу через тот же сокет конектиться к следующему компа.
Я пробовал делать так: тред постоянно проверяет булевскую переменную, и если она имзенилась, переходит к следующему компу. А саму эту переменную будет изменять сокет в конце своей работы с каждым компом.
Только когда тред проверяет эту переменную он грузит проц на 100 процентов.А это и плохо
PhoeniXX вне форума  

Опции темы

Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 17:49.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.