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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.07.2012, 20:55   #1
Mrsqler
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 146
По умолчанию Delphi потоки

Только начал учить потоки,до этого никогда с ними не работал,нашел в инете небольшой мануал,всё сделал как там написано,но программа не компилится.
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
   TNewThread = class(TThread)
  private
    { Private declarations }
  protected
    procedure Execute; override;
  end;
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  NewThread: TNewThread;
begin
  NewThread:=TNewThread.Create(true);
  NewThread.FreeOnTerminate:=true;
  NewThread.Priority:=tpLower;
  NewThread.Resume;
end;

end.
Вот что во втором юните,в созданном Thread
Код:
unit Unit2;

interface

uses
  Classes;

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

implementation

{ TNewThread }



procedure TNewThread.Execute;
begin
  while true do {ничего не делаем};
end;


end.
Появляется ошибка Unsatisfied forward or external declaration: 'TNewThread.Execute'
Mrsqler вне форума Ответить с цитированием
Старый 06.07.2012, 21:06   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ты в первом юните зачем описал TNewThread ?
implementation
uses Unit2 этого хватит чтоб подключить второй модуль и использовать его классы.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.07.2012, 11:25   #3
Mrsqler
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 146
По умолчанию

А если у меня во втором потоке используется работа с Edit ?Программа не хочет компилироваться,ругается именно на эти edit.Где их объявлять нужно?На форме вроде всё лежит.
Undeclared identifier: 'Edit1'
Mrsqler вне форума Ответить с цитированием
Старый 07.07.2012, 11:54   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

почитай о синхронизации. Поток это не основная программа и оттуда нельзя напрямую работать с остальной программой и/или другими потоками.
Человек_Борща вне форума Ответить с цитированием
Старый 07.07.2012, 20:41   #5
Mrsqler
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 146
По умолчанию

опять ничего не работает...
Смысл в том,что надо реализовать движение progressBar через поток
в Unit1 ничего не писал(в статье про это ничего не сказано было)
unit1
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    ProgressBar1: TProgressBar;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

 uses Unit2;

{$R *.dfm}

end.
в unit2
Код:
unit Unit2;

interface

uses
  Classes;

type
  TNewThread = class(TThread)
  private
   Progress: integer;
    procedure SetProgress;
  protected
    procedure Execute; override;
  end;

implementation

{ TNewThread }

procedure TNewThread.Execute;
var
  i: integer;
begin
  for i:=0 to 100 do
  begin
    sleep(50);
    Progress:=i;
    Synchronize(SetProgress);
  end;
end;

procedure TNewThread.SetProgress;
begin
  Form1.ProgressBar1.Position:=Progress;
end;

end.
ругается на Sleep,и не видит Form1 хотя я её подключил в uses.

Последний раз редактировалось Mrsqler; 07.07.2012 в 21:49.
Mrsqler вне форума Ответить с цитированием
Старый 07.07.2012, 21:57   #6
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

В Unit'е с потоком нет нигде об упоменании Unit1(там Form1) и Windows(там sleep). Вот в чем проблема. И да, слип слишком маленький, 1 сек поставьте чтобы видно было результат.
Человек_Борща вне форума Ответить с цитированием
Старый 08.07.2012, 00:02   #7
Mrsqler
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 146
По умолчанию

Спасибо,теперь всё работает!Нормальных статей нигде нету...(
Mrsqler вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Потоки в delphi ulia8412 Помощь студентам 0 18.12.2011 10:06
Delphi потоки world12_tk Помощь студентам 0 01.11.2011 01:23
Delphi. Потоки. Florento Фриланс 1 17.06.2011 17:22
Потоки (Delphi) VadEr Помощь студентам 0 11.04.2010 18:24
Потоки в Delphi frai Общие вопросы Delphi 4 13.01.2008 03:39