Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Потоки-потоки


SpyBoy ©   (2005-07-20 23:15:00) 

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

Не работает:выдает сообщение:
[Error] Unit1.pas(16): Unsatisfied forward or external declaration: 'TMyThread1.DoWork'


alpet   (2005-07-27 18:25:00) [1]

SpyBoy ©   (27.07.05 16:25) [10]

И какой тебе в итоге будет толк от этого? Флажок наверняка будет меняться еще даже до перерисовки много раз - ты визуально не уследишь что к чему.

Есть в Delphi\Demos\Threads неплохой пример "соревнования" потоков в сортировке, советую с него начать изучение работы многопоточности.


Fay   (2005-07-27 18:14:00) [2]

Как эта ветка попала в WinAPI?!


SpyBoy   (2005-07-27 16:25:00) [3]

alpet ©   (21.07.05 13:23) [8]
Тогда как её осуществить через вспомогательнЫЕ


alpet   (2005-07-21 13:23:00) [4]

Бесполезный совершенно код - у тебя установка флажка все равно производится в основном потоке,а от вспомогательных толку ноль. Если сообщение BM_SETCHECK контролу посылал из каждого - такой же был бы результат.


kblc   (2005-07-21 13:23:00) [5]

не успел извиниться... я 2 ночи не спал - а помочь хотелось... прогнал я чё-то...

он писал что у него ошибка такая, как будто этой ф-ии ваще нету ;)
забейте на сегодня на немучачего меня ;)


alpet   (2005-07-21 13:20:00) [6]

>procederu
Компилятор должно быть не понимает, что ты хотел обозначить процедуру :))


Digitman   (2005-07-21 13:18:00) [7]


> kblc ©   (21.07.05 13:11) [5]


эт чего такое было ?)


kblc   (2005-07-21 13:11:00) [8]

type
TMyThread1 = class(TThread)
 protected
   procedure DoWork;
   procedure Execute; override;
 end;

procederu TMyThread1.DoWork;
begin
 //
end;


Ботвин Дмитрий   (2005-07-21 12:46:00) [9]

Во первых нахрен нужен такой код?
А во вторых почему у тебя в разделе protected для двух разных потоков одна и та же процедура прописана?
Как это синхронизироваться должно то?


Digitman   (2005-07-21 12:19:00) [10]

Кариха - в топку.


SpyBoy   (2005-07-21 12:11:00) [11]

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

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

var Form1: TForm1;
    T1   : TMyThread1;
    T2   : TMyThread2;

implementation

procedure TMyThread1.Execute;
begin
  {Пока процесс не прервали, выполняем DoWork}
  while not Terminated do
    Synchronize(DoWork);
end;

procedure TMyThread2.Execute;
begin
  {Пока процесс не прервали, выполняем DoWork}
  while not Terminated do
    Synchronize(DoWork);
end;

procedure TMyThread1.DoWork;
begin
  {Пытаемся победить второй процесс :-)}
  Form1.CheckBox1.Checked := True;
end;

procedure TMyThread2.DoWork;
begin
  {Пытаемся победить первый процесс :-)}
  Form1.CheckBox1.Checked := False;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  {Если кнопка называется Stop...}
  if Button1.Caption = 'Stop' then begin
    {Прерываем оба процесса}
    T1.Terminate;
    T2.Terminate;
    {Изменяем название кнопки}
    Button1.Caption := 'Start';
    {Выходим из процедуры}
    Exit;
  end;
  {Создаем и сразу запускаем два процесса}
  T1 := TMyThread1.Create(False);
  T2 := TMyThread2.Create(False);
  {Здесь можно поэкспериментировать с приоритетами:
   T1.Priority := tpLowest;
   T2.Priority := tpHighest;
   }
  {Переименовываем кнопку}
  Button1.Caption := 'Stop';
end;


Eraser   (2005-07-21 00:10:00) [12]

SpyBoy ©   (20.07.05 23:15)

Приведи реализацию procedure DoWork;


Наверх

Титульная страница Поиск, карта сайта Написать письмо