IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Программирование (http://www.imho.ws/forumdisplay.php?f=40)
-   -   Delphi: Сокеты и Потоки (http://www.imho.ws/showthread.php?t=85000)

PhoeniXX 03.05.2005 18:46

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

Существует несколько потоков, каждый для определенного компьютера,в каждом потоке создаеться TelnetClient:TTnCnx компонент(Из набора ICS, для телнета), в самом потоке он соеденяеться и отправляет определенные данные.
А как заставить сам поток ждать завершения работы сокета?
Пробовал: WaitForSingleObject(TelnetClient.Socket.Handle,INFINITE);
и
TelnetClient.Socket.WaitForClose;
Оба варианта не помогли.Как лучше поступить в данной ситуации???

/7y3uK 04.05.2005 10:58

ну сначала нужно почитать как устроены потоки :) :)
ну на пальцах чисто теоретически - вот ты запускаешь тред в котором у тебя идет прослушка сокета.... тред у тебя умрет в том случае когда выполнит все возложенные на него задачи (ну это правда не всегда так, но ориентироваться надо на это утверждение)... соответственно самый простой способ не дать умереть треду это организовать внутри него какой нить цикл по булевому флагу... ну а самое главное в тредах это понять как работает wait и notify - соответственно если ты собрался заставить тред ждать чего то - положи его в wait - разбудить его соответственно нужно будет дернуть notify.... Ну и самое важное - для равильного контроля за тредом нужно использовать обязательно синхронизированные методы... про синхронизацию тут был топик кстати с примером

PhoeniXX 04.05.2005 23:56

Пасиба, но это немного не то.
Суть проблемы в том что сокет находиться с самом треде, и создаеться в рунтайме. И если я правильно поняо,если усыплять поток, то сокет тоже усыпляеться.

/7y3uK 05.05.2005 10:46

Странно, себе обычно с сокетами по другому все представлял :biggrin:
открываются сокеты в основном потоке а слушает каждый сокет отдельный тред...
ну это не суть.... ну сделай еще один тред который будет тебе мониторить и будить если надо твой стред с сокетом...

PhoeniXX 06.05.2005 12:31

Допустим у меня для 5 компов - 5 тредов, и для каждого из них создавать по 1 проверяющему?, это слишком много, а если их будет 30?
Тем более, что вопрос в том и заключаеться,
если создавать проверяющий тред, его ж надо както притормаживать, или он опять будет использовать весь проц. А как раз в этом и проблема :contract:

/7y3uK 06.05.2005 18:55

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

PhoeniXX 07.05.2005 01:47

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


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

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