Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.03.2012, 12:29   #1
UnSUB
 
Регистрация: 29.12.2009
Сообщений: 3
По умолчанию gethostbyaddr - время работы

Всем доброго времени суток. Проблема в следующем - имеется функция на основе gethostbyaddr (код ниже), преобразующая IP адрес в имя. функция работает в другом потоке, поэтому время реакции HostByIp критично. как заставить возвращать функцию HostByIp=False, если не получилось разрешить адрес в имя через определенное время, к примеру через 1 секунду?
Возможны любые другие компоненты вместо gethostbyaddr.
Заранее спасибо!

function HostByIp(const AIPAddress : String; var ADomainName : String) : Boolean;
var
_IPAddress : Longint;
_RemoteHost : PHostEnt;
begin
_IPAddress := inet_addr(PChar(AIPAddress));
_RemoteHost := gethostbyaddr(@_IPAddress, sizeof(_IPAddress), AF_INET);
if WSAGetLastError() <> 0 then begin
if WSAGetLastError() = 11001 then begin
Result := False;// ShowMessage('Хост не найден!');
end else begin
Result := False; // ShowMessage('Ошибка#: ' + IntToStr(WSAGetLastError()));
end;
Exit;
end;
UnSUB вне форума Ответить с цитированием
Старый 26.03.2012, 15:08   #2
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

У меня тоже была такая проблема решил ее следующим образом, запускал функцию gethostbyaddr в другом потоке давал ей временный список, у меня это был массив, но можно и простой TStrings полученных адресов для обработки и она неторопясь перебирая полученные адреса подставляла значения рядом с адресом у меня в массиве отдельное значение для этого было, при этом вызывая событие успешного выполнения немешая работе основному потоку, затем обратно по индексу можно и по проверке аресов в основной таблице полученные значения вставлялись в таблицу после этого очищался этот временный список.

Эта функция gethostbyaddr тормозит сильно из за медленного интернета.

Последний раз редактировалось Aliens_wolfs; 26.03.2012 в 15:34.
Aliens_wolfs вне форума Ответить с цитированием
Старый 26.03.2012, 15:43   #3
UnSUB
 
Регистрация: 29.12.2009
Сообщений: 3
По умолчанию

думал о похожем, но слишком муторно в моем случае. программка работает на dns сервере и по факту если она не разрешила адрес сразу - ждать бесполезно. да и поток адресов сыпется сразу в базу ACCESS, болтаться потом по полям и заменять адреса не хочется.
UnSUB вне форума Ответить с цитированием
Старый 28.03.2012, 10:25   #4
UnSUB
 
Регистрация: 29.12.2009
Сообщений: 3
По умолчанию

неужели это такой сложный вопрос?? товарищи, потратьте 5 минут, буду признателен!
UnSUB вне форума Ответить с цитированием
Старый 28.03.2012, 12:06   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

кроме как создавать поток(которому давать время) тут ничего и не выйдет.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Завершение работы и время в C++ Дэнис Помощь студентам 9 27.02.2012 23:38
Время работы компьютера artemavd Общие вопросы Delphi 10 01.03.2010 22:40
Время работы программы Magist Компоненты Delphi 5 24.10.2009 20:52
Время работы WINDOWS В_И_К_Т_О_Р Помощь студентам 8 30.01.2008 12:42
Время работы сортировок Боня Помощь студентам 1 10.02.2007 17:53