|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
26.03.2012, 12:29 | #1 |
Регистрация: 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; |
26.03.2012, 15:08 | #2 |
Форумчанин
Регистрация: 16.12.2009
Сообщений: 902
|
У меня тоже была такая проблема решил ее следующим образом, запускал функцию gethostbyaddr в другом потоке давал ей временный список, у меня это был массив, но можно и простой TStrings полученных адресов для обработки и она неторопясь перебирая полученные адреса подставляла значения рядом с адресом у меня в массиве отдельное значение для этого было, при этом вызывая событие успешного выполнения немешая работе основному потоку, затем обратно по индексу можно и по проверке аресов в основной таблице полученные значения вставлялись в таблицу после этого очищался этот временный список.
Эта функция gethostbyaddr тормозит сильно из за медленного интернета. Последний раз редактировалось Aliens_wolfs; 26.03.2012 в 15:34. |
26.03.2012, 15:43 | #3 |
Регистрация: 29.12.2009
Сообщений: 3
|
думал о похожем, но слишком муторно в моем случае. программка работает на dns сервере и по факту если она не разрешила адрес сразу - ждать бесполезно. да и поток адресов сыпется сразу в базу ACCESS, болтаться потом по полям и заменять адреса не хочется.
|
28.03.2012, 10:25 | #4 |
Регистрация: 29.12.2009
Сообщений: 3
|
неужели это такой сложный вопрос?? товарищи, потратьте 5 минут, буду признателен!
|
28.03.2012, 12:06 | #5 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
кроме как создавать поток(которому давать время) тут ничего и не выйдет.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Завершение работы и время в 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 |