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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.11.2015, 13:54   #11
bilibian
Форумчанин
 
Регистрация: 21.01.2014
Сообщений: 389
По умолчанию

Сообщаем о завершении потока:

Код:
type
  TForm1 = class(TForm)
    procedure MyThreadTerminated(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  MyThread := TMyThread.Create(True);
  MyThread.FreeOnTerminate :=true;
  MyThread.OnTerminate:=MyThreadTerminated;
  MyThread.memo:=memo1.lines;
  MyThread.Priority:=tpLower;
  MyThread.Resume;
End;

procedure TForm1.MyThreadTerminated(Sender: TObject);
begin
  memo1.Lines.Add('Поток завершен');
end;
bilibian вне форума Ответить с цитированием
Старый 12.11.2015, 08:04   #12
lord24
Форумчанин
 
Регистрация: 04.01.2013
Сообщений: 107
По умолчанию

Ну вот при таком коде, в отдельном модуле потока, все равно ошибка
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Controls, Forms, Dialogs;

type
  TMyThread = class(TThread)
  private
    { Private declarations }
  protected
    procedure Execute; override;
  end;

var
  MyThread: TMyThread;

implementation

procedure TMyThread.Execute;
begin                                       //Здесь описывается код, который будет выполняться в потоке
while not Terminated do begin
  If MessageDlg('Поток работает 1. Остановить?',mtConfirmation, [mbYes,mbNo],0)= mrYes
  then
  begin
  MyThread.Terminate;
  end;

end;
end;

end.
lord24 вне форума Ответить с цитированием
Старый 12.11.2015, 09:36   #13
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Ты не читаешь, что тебе пишут...
Код:
unit Unit1;

{$mode objfpc}{$H+}

interface

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

type

    { TMyThread }

    TMyThread = class(TThread)
  private
    { Private declarations }
  protected
    procedure Execute; override;
  end;

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { private declarations }
    MyThread : TMyThread;
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
begin
  MyThread := TMyThread.Create(True);
  MyThread.FreeOnTerminate :=true;
  MyThread.Priority:=tpLower;
  MyThread.Resume;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 If MessageDlg('Поток работает 1. Остановить?',mtConfirmation, [mbYes,mbNo],0)= mrYes then begin
   MyThread.Terminate;
   MyThread.WaitFor; //Если нужно ждать завершения потока ОБЯЗАТЕЛЬНО, иначе убрать.
 end;
end;

{ TMyThread }

procedure TMyThread.Execute;
begin
  while not Terminated do begin
    //Здесь описывается код, который будет выполняться в потоке
  end;
end;

end.
Так понятнее?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.11.2015, 13:09   #14
bilibian
Форумчанин
 
Регистрация: 21.01.2014
Сообщений: 389
По умолчанию

lord24, я ведь уже готовый код для Вас написал. Ctrl + C / Ctrl + V и дело в шляпе.
bilibian вне форума Ответить с цитированием
Старый 12.11.2015, 14:28   #15
lord24
Форумчанин
 
Регистрация: 04.01.2013
Сообщений: 107
По умолчанию

bilibian, я и рад бы да просто в голове все как-то не стыкуется и стопор стоит по этому.
Stilet, знаю не любишь ты этот Thread, но...

Я читаю, но я просто не понимаю.
Создал поток отдельным модулем (пробовал и все в одном...) так File -> New -> Other->TThread Object и обозвал MyThread (все стандартно как написано).
В процедуре потока вот это
Код:
procedure TMyThread.Execute;
var
PostData:TStringList;
html1:WideString;
begin                                       //Здесь описывается код, который будет выполняться в потоке
while not Terminated do begin
  try
  PostData:=TStringList.Create;                                    //      отправка на сервер запроса на доступность сайта
  PostData.Clear;
  PostData.Add(AnsiToUTF8('number=1'));
  html1:=Form1.IdHTTP1.Post('http://site.php',PostData);
  PostData.Free;
  except
  on e:Exception do
  PostData.Free;
  end;

end;
end;
Где сравнить мне ответ полученный в html1(ответ) что бы юзеру выдать сообщение о недоступности сайта?
Хочу в таймере, но его процедура в другом юните.
В коде выше все в одном юните

Эх, слабак я еще.... одна печаль.....

Последний раз редактировалось lord24; 12.11.2015 в 14:30.
lord24 вне форума Ответить с цитированием
Старый 12.11.2015, 14:36   #16
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,361
По умолчанию

Цитата:
Где сравнить мне ответ полученный в html1(ответ) что бы юзеру выдать сообщение о недоступности сайта?
Зачем это вообще надо? Вы что так хотите постоянно проверять? в этом смысла нету совсем.
come-on вне форума Ответить с цитированием
Старый 12.11.2015, 14:42   #17
bilibian
Форумчанин
 
Регистрация: 21.01.2014
Сообщений: 389
По умолчанию

Цитата:
Сообщение от lord24 Посмотреть сообщение
Где сравнить мне ответ полученный в html1
Сразу после запроса и сравнивайте. С помощью if else
bilibian вне форума Ответить с цитированием
Старый 12.11.2015, 14:46   #18
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
знаю не любишь ты этот Thread, но...
Я не люблю??? О_о
С чего ты взял?
Цитата:
Где сравнить мне ответ полученный в html1?
Вынеси html1:WideString; как свойство TMyThread.
Ну и тогда можно будет его сравнивать в OnTerminate к примеру.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.11.2015, 15:33   #19
lord24
Форумчанин
 
Регистрация: 04.01.2013
Сообщений: 107
По умолчанию

Цитата:
Зачем это вообще надо? Вы что так хотите постоянно проверять? в этом смысла нету совсем.
смысл есть: отвалился интернет, сайт, сервер ... проверка покажет

Цитата:
Сообщение от Stilet Посмотреть сообщение
С чего ты взял?
Сам говорил где-то в сообщениях на эту тему

Цитата:
Сообщение от bilibian Посмотреть сообщение
Сразу после запроса и сравнивайте. С помощью if else
Да так, но после сравнения как сказать пользователю о недоступности сайта, если вызывать
Код:
 If MessageDlg('Поток работает 1. Остановить?',mtConfirmation, [mbYes,mbNo],0)= mrYes
не от сюда
Код:
procedure TMyThread.Execute;
begin
  while not Terminated do begin
    //Здесь описывается код, который будет выполняться в потоке
  end;
end;

end.

Последний раз редактировалось Stilet; 12.11.2015 в 16:16.
lord24 вне форума Ответить с цитированием
Старый 12.11.2015, 15:44   #20
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