|
|
|
|
Так ли
необходимо использовать 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
|
|