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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.11.2015, 17:13   #41
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,361
По умолчанию

Выбросить таймер, и этот, с позволения сказать, "код".
come-on вне форума Ответить с цитированием
Старый 23.11.2015, 17:16   #42
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
lord24
Что ты к этому таймеру прицепился? Дался он тебе...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.11.2015, 07:56   #43
lord24
Форумчанин
 
Регистрация: 04.01.2013
Сообщений: 107
По умолчанию

Ребят, ну а как мне проверять периодически переменную и вызвать остановку потока в нужном случае?
Или все это засунуть в процедуру потока?
lord24 вне форума Ответить с цитированием
Старый 24.11.2015, 09:44   #44
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
как мне проверять периодически переменную и вызвать остановку потока в нужном случае?
Зачем тебе делать такие проверки? Ты сам не знаешь чего хочешь.
Тебе нужно реагировать на недоступность связи?
Код:
procedure TMyThread.Execute;
var trying:integer;
...
begin
 trying:=10;
 IdHTTP2:=TIdHTTP.Create(nil);
...

repeat try
 html1:=IdHTTP2.Post('http://www.Site.ru',PostData);trying:=0;
 except 
   sleep(2000);
   dec(trying);
 end;
until (trying=0) or Terminated;

...
IdHTTP2.Free; IdHTTP2:=nil;
end;
Или чего ты хочешь добиться своим таймером? остановить поток и по кнопке можно.
Накой черт тебе таймер??
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.11.2015, 10:35   #45
lord24
Форумчанин
 
Регистрация: 04.01.2013
Сообщений: 107
По умолчанию

Я не понимаю чего-то, а точнее всего...
Мне надо проверить сайт на доступность (Отправляю на скрипт и получаю нужный ответ). Если он недоступен, то проинформировать пользователя об этом и предоставить выбор: будет он работать без сайта или нет, но в любом случае остановить поток, так как в нем нет уже смысла. Если сайт доступен, то отправить туда запрос на получение от него данных и получить их. Данные могут появиться в любое время, а значит надо проверять периодически. По этому и таймер и всякие проверки, а по другому не знаю как..
Вот как-то так.
lord24 вне форума Ответить с цитированием
Старый 24.11.2015, 11:01   #46
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
По этому и таймер и всякие проверки, а по другому не знаю как..
Ничего этого тебе не надо.
Показываю на пальцах:
Код:
unit Unit1;

{$mode objfpc}{$H+}

interface

uses   IdHTTP,
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs;

type

  { TSite }

  TSite=class(TThread)
    protected
      procedure Execute; override;
  end;

  { TForm1 }

  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { private declarations }
     procedure IsResult(Sender: TObject);
  public
    { public declarations }
  end;

var  SiteIsOn:Boolean;
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
begin
 //Запускаем проверку в потоке
  with TSite.Create(true) do begin
    //Просим проверку самоустраниться после отработки
    FreeOnTerminate:=true;
    //Задаем событие окончания проверки
    OnTerminate:=@IsResult;
    //Поехали...
    Resume;
  end;
end;

procedure TForm1.IsResult(Sender: TObject);
begin
 //Если проверка не вернула фальш то...
 if SiteIsOn then ShowMessage('Нормуль. Сайтик живее дедули Ленина');
end;

{ TSite }

procedure TSite.Execute;
begin
  with TIdHTTP.Create do begin
    try
      //Если сайт доступен, и... тут могла быть ваша проверка на 404
      SiteIsOn:=Get('www.googlo.py')<>'';
    except
      //Иначе вернуть False
      SiteIsOn:=false;
    end;
  end;
end;

end.
Все. Никакого таймера никуда не нужно.
Сделай пользователю кнопку: "Перечитать данные" и пусть нажимает когда ему нужно.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.11.2015, 11:22   #47
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,361
По умолчанию

Цитата:
Я не понимаю чего-то
Поток сам проверяет постоянно, когда в потоке идет запрос - это и есть проверка, что тут не понятно? Вы в таймере делаете такойже запрос, так зачем их два, достаточно одной таблетки.
Остается в нужный момент синхронизировать с основным и если надо кинуть сообщение пользователю, все же просто.
come-on вне форума Ответить с цитированием
Старый 25.11.2015, 10:30   #48
lord24
Форумчанин
 
Регистрация: 04.01.2013
Сообщений: 107
По умолчанию

Хорошо, а с какой частотой, в данном случае, поток будет отправлять запрос сайту на доступность?
lord24 вне форума Ответить с цитированием
Старый 25.11.2015, 11:03   #49
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я никак не могу понять зачем пинговать сайт время от времени...
Ты хочешь с сайта таскать данные, чтоб соблюдать их актуальность в своей программе? Для чего тебе проверять доступность постоянно?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 25.11.2015, 13:27   #50
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,361
По умолчанию

Цитата:
а с какой частотой, в данном случае, поток будет отправлять запрос сайту на доступность?
Зачем какая то доступность? поток отправляет запрос - получил ответ, хорошо, нет - кинул пользователю что пока сайт не отвечает. Уже поясняли что любой запрос это и есть проверка. Что толку с того что у вас когда пингует нормально но когда в потоке упадет, или наоборот пинганули - нет ответа, но тут же сервер ожил? отсюдо следует что доступность она как зайцу стоп сигнал, совсем бесполезное дело, ни о чем не говорит.

А с учетом того что запросы можно отправлять асинхронно то и смысл в отдельном потоке остается под вопросом.
come-on вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с RTSP потоком (нужно сделать снимок из потока) power11 Мультимедиа в Delphi 1 30.04.2015 20:01
Проблема с потоком! vovken1997 Общие вопросы Delphi 2 12.04.2012 21:21
Проблема с потоком ZekaUa Общие вопросы Delphi 4 01.02.2012 15:29
Проблемы с потоком spydark91 Общие вопросы Delphi 38 23.06.2011 16:23
Проблема с потоком Araver Общие вопросы Delphi 4 16.10.2007 04:30