На главную
Подписка
Новости


Рейтинг@Mail.ru











Главная / DELPHI / Часто задаваемые вопросы и ответы на них / Работа с сетью / Так ли необходимо использовать GetHostByName вместо аналогичного асинхронного метода Сделать домашней страницей Добавить в избранное Написать писмо

Так ли необходимо использовать GetHostByName вместо аналогичного асинхронного метода


Q: Так ли необходимо использовать GetHostByName вместо аналогичного асинхронного метода, если все синхронные методы сильно грузят процессор и их трудно прервать в случае необходимости, только через TerminateThread. Я тут обрадовался советам, написал кэш имен и ip адресов, сделал через GetHostByName, прилепил нотификации, многопоточность, а оказывается, все опять нужно переделывать? Или оставить как есть? Дело в том, что я это, несомненно буду использовать в последующих разработках, и мне хочется делать сразу на совесть. Дайте совет, please. Я проверял, все это хозяйство вроде процессор грузит достаточно мало.


A: Ты прав, никакой нагрузки на процессор нет. Пример тому - AMV и ADR (см. подпись), многопоточные программы, использующие только berkley-подмножество WinSocks 1.1, никаких асинхронных функций. Каждое письмо посылается и каждый емайл проверяется отдельным потоком. Прерывать при помощи TerminateThread тоже не надо. Когда мне нужно остановить поток (пользователь остановил проверку адресов), я делаю так:

1). устанавливаю int network_off = true

2). из главного потока делаю shutdown и closesocket для сокета потока - даже
если я висел на recv или send, то они увидев это вывылятся

3). в коде потока часто-часто стоят проверки переменной network_off и если
true, то поток __самостоятельно__ и цивилизовано завершается, если он не
соизволит остановится увидев "ошибку сети"

4). главный поток ждет 500 мс и считает сколько осталось потоков, если
потоки завершились не все, то он ждет еще 500 ms т повторяет операцию, лишь
за тем он вызывает для непокорных потоков TerminateThread

На самом деле пункт 4 немного похитрей ;), но идея такая. Потоки мне убивать
практически никогда не приходится.

Alexander P. Gorlach,
Elcom E-mail Management Software Team:
* Advanced Mail List Verify: http://www.elcomsoft.com/amv.html
* Advanced Direct Remailer: http://www.elcomsoft.com/adr.html

Copyright ©   "Мастера DELPHI"   E-mail:   delphi@mastak.com  http://www.delphimaster.ru
Источник получения информации: http://www.delphimaster.ru
Hosted by uCoz