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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.05.2011, 19:26   #1
JasperCRT
Пользователь
 
Аватар для JasperCRT
 
Регистрация: 23.12.2010
Сообщений: 40
По умолчанию Почему не работает цикл?

Почему не работает цикл?
Код:
procedure Tform1.CheckConnetion;
var
  error : DWORD;
  wVerReq: WORD;
  wsaData: TWSAData;
  h: PHostEnt;
  begin
 if Clientsocket1.active <> true then begin
 repeat
 wVerReq := MAKEWORD(1, 1);
  WSAStartup(wVerReq, wsaData);
  {Получаем хост (имя) компа}
  h := GetHostByName('simplewizard.no-ip.org');
  error := GetLastError();
    if (error = 0) then
    begin
    {Достаем IP}
  i := iNet_ntoa(PInAddr(h^.h_addr_list^)^);
  WSACleanup;
ClientSocket1.Address := i; {Адрес сервера }
ClientSocket1.Port := 777; {Порт сервера}
Clientsocket1.active:= true; end;
 until error=0;
 end;
 end;
По идее после того как будет получен хост если возникает ошибка (т.е. нет связи с интернетом) то цикл должен начаться заново и так до бесконечности пока не включат интернет, а когда его всё же включат должен сработать код приведенный между if и end и программа выходит из цикла и самой функции!
А у меня при запуске со включенным интернетом программа работает нормально т.е. подключается, а вот когда инет выключен и я запускаю программу она сначала работает нормально но через некоторое время повышается потребление оперативы (смотрел в дз) с 6 мб аж до 10! И в итоге когда интернет включается программа просто не срабатывает, а тупо весит в дз без каких либо действий... Посмотрите кому не сложно! Зарание большое спасибо!
Интернет как жизнь - смысла нет, а уходить не хочется!
JasperCRT вне форума Ответить с цитированием
Старый 23.05.2011, 23:36   #2
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Абсолютно бредовый код.
Что это за дикая солянка из WinsockAPI-вызовов, WinAPI-вызовов и фривольных манипуляций с TClientSocket в неблок.режиме ?
Выкинуть нахрен WinAPI и WinsockAPI !!
Все что нужно делается средставами одного TCliеntSocket.
Штудировать события OnConnect и OnError.

С какого перепугу GetLastError обязана возвращать отказы Winsock-подсистемы, если в справке черным по белому написано, что для получения кодов отказов этой подсистемы предназначена WSAGetLastError ?

И с какого перепугу WSAStartup вызывается безусловно, в то время как WSACleanup условно ?

Последний раз редактировалось Stilet; 24.05.2011 в 07:56.
mss вне форума Ответить с цитированием
Старый 24.05.2011, 18:18   #3
JasperCRT
Пользователь
 
Аватар для JasperCRT
 
Регистрация: 23.12.2010
Сообщений: 40
По умолчанию

Ммм... если честно код собирал из отдельных частей) В этом деле новичек поэтому-то и получилась "Дикая солянка". Будем переписывать) Спасибо за ответ)
Если не сложно ответь на пару вопросов:
1: Что за "неблок.режим"?
2: Где можно найти документацию по TClient/ServerSocket? (Google не помог!)
Интернет как жизнь - смысла нет, а уходить не хочется!
JasperCRT вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
подскажите почему не работает цикл ПОМОГИТЕ mato Общие вопросы C/C++ 2 20.12.2009 15:21
Почему не работает цикл? Marsik Помощь студентам 0 18.11.2009 15:01
Цикл работает не полностью почему? foE Компоненты Delphi 2 07.06.2009 14:32
Почему не работает цикл??? kobolok Помощь студентам 1 06.05.2009 12:24
Почему не работает цикл????? Marsik Помощь студентам 2 22.06.2008 14:16