imho.ws |
![]() |
![]() |
![]() |
# 1 |
Junior Member
Регистрация: 24.06.2003
Адрес: Ukraine,kherson
Сообщения: 65
![]() |
![]()
Здраствуйте.
У меня вопрос по поводу сокетов, может на него уже отвечали,но я не нашел ответ ![]() Существует несколько потоков, каждый для определенного компьютера,в каждом потоке создаеться TelnetClient:TTnCnx компонент(Из набора ICS, для телнета), в самом потоке он соеденяеться и отправляет определенные данные. А как заставить сам поток ждать завершения работы сокета? Пробовал: WaitForSingleObject(TelnetClient.Socket.Handle,INFINITE); и TelnetClient.Socket.WaitForClose; Оба варианта не помогли.Как лучше поступить в данной ситуации??? |
![]() |
![]() |
# 2 |
Advanced Member
Регистрация: 09.03.2004
Адрес: толстозадая Москва
Сообщения: 498
![]() ![]() ![]() ![]() |
ну сначала нужно почитать как устроены потоки
![]() ![]() ну на пальцах чисто теоретически - вот ты запускаешь тред в котором у тебя идет прослушка сокета.... тред у тебя умрет в том случае когда выполнит все возложенные на него задачи (ну это правда не всегда так, но ориентироваться надо на это утверждение)... соответственно самый простой способ не дать умереть треду это организовать внутри него какой нить цикл по булевому флагу... ну а самое главное в тредах это понять как работает wait и notify - соответственно если ты собрался заставить тред ждать чего то - положи его в wait - разбудить его соответственно нужно будет дернуть notify.... Ну и самое важное - для равильного контроля за тредом нужно использовать обязательно синхронизированные методы... про синхронизацию тут был топик кстати с примером
__________________
В нашей стране настаивать на кореньях, черной смородине, лимонных корках - гораздо эффективнее, чем на правах |
![]() |
![]() |
# 4 |
Advanced Member
Регистрация: 09.03.2004
Адрес: толстозадая Москва
Сообщения: 498
![]() ![]() ![]() ![]() |
Странно, себе обычно с сокетами по другому все представлял
![]() открываются сокеты в основном потоке а слушает каждый сокет отдельный тред... ну это не суть.... ну сделай еще один тред который будет тебе мониторить и будить если надо твой стред с сокетом...
__________________
В нашей стране настаивать на кореньях, черной смородине, лимонных корках - гораздо эффективнее, чем на правах |
![]() |
![]() |
# 5 |
Junior Member
Регистрация: 24.06.2003
Адрес: Ukraine,kherson
Сообщения: 65
![]() |
![]()
Допустим у меня для 5 компов - 5 тредов, и для каждого из них создавать по 1 проверяющему?, это слишком много, а если их будет 30?
Тем более, что вопрос в том и заключаеться, если создавать проверяющий тред, его ж надо както притормаживать, или он опять будет использовать весь проц. А как раз в этом и проблема ![]() |
![]() |
![]() |
# 6 |
Advanced Member
Регистрация: 09.03.2004
Адрес: толстозадая Москва
Сообщения: 498
![]() ![]() ![]() ![]() |
нет, я просто не могу понять зачем тебе открывать сокеты в отдельных тредах... сокеты серверные и так каждый в своем треде работает, т.е. сам тредами своими рулит - на то они и сокеты... серверный сокет не закроется до тех пор пока его слушает клиент...
__________________
В нашей стране настаивать на кореньях, черной смородине, лимонных корках - гораздо эффективнее, чем на правах |
![]() |
![]() |
# 7 |
Junior Member
Регистрация: 24.06.2003
Адрес: Ukraine,kherson
Сообщения: 65
![]() |
у меня сокеты не серверный, а клиентские.
Суть простая, я незнаю что делать треду пока работает сокет, когда сокет закончит работу с этим компом, он сам сразу через тот же сокет конектиться к следующему компа. Я пробовал делать так: тред постоянно проверяет булевскую переменную, и если она имзенилась, переходит к следующему компу. А саму эту переменную будет изменять сокет в конце своей работы с каждым компом. Только когда тред проверяет эту переменную он грузит проц на 100 процентов.А это и плохо ![]() |
![]() |