Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.08.26;
Скачать: CL | DM;

Вниз

Вопрос про thread.   Найти похожие ветки 

 
vegarulez ©   (2007-08-03 18:39) [0]

По совету одного форумчанина нажал F1 на Thread и начал читать...
так вот у меня вопрос...
там сразу же есть экзампл... объясните мне, что он делает?
Потому как, у меня, ничего не меняется, тока нажимаю на кнопку Create Thread - тут же прога начинает висеть ничего не делая... и так и висит.
В чём тогда суть экзампла (c:\Program Files\Borland\Delphi6\Help\Examples\Prgrsbar\)?


 
Dib@zol ©   (2007-08-03 18:52) [1]

А у меня такого ваще нет :(
Скинь в форум иль на мыло...


 
vegarulez ©   (2007-08-03 19:46) [2]

вот это c:\Program Files\Borland\Delphi6\Help\Examples\Prgrsbar\
скинул на залил.ру качайте:
http://slil.ru/24700148

Ато что в хелпе написано сюда закину:

Objects

The example demonstrates using the TProgressBar and TThread objects.

Running

To run this example, load the project file from the Help\Examples\PrgrsBar directory.

Description

This example illustrates the use of a progress bar control, how to update the control, and how to manage threads during such a process.

For another example using TProgress bar see Technical Information Document #3103 on our website: www.inprise.com/devsupport/delphi/ti_list/TI3103.html.

unit Pg1;

interface

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

const
 WM_ThreadDoneMsg = WM_User + 8;

type
 TForm1 = class(TForm)
   ProgressBar1: TProgressBar;
   ProgressBar2: TProgressBar;
   Button1: TButton;
   Button2: TButton;
   TrackBar1: TTrackBar;
   TrackBar2: TTrackBar;
   Bevel1: TBevel;
   Bevel2: TBevel;
   Label1: TLabel;

   Label2: TLabel;
   Button3: TButton;
   Button4: TButton;
   procedure Button1Click(Sender: TObject);
   procedure Button2Click(Sender: TObject);
   procedure Button3Click(Sender: TObject);
   procedure Button4Click(Sender: TObject);
   procedure FormCreate(Sender: TObject);
   procedure TrackBar1Change(Sender: TObject);
   procedure TrackBar2Change(Sender: TObject);
   procedure FormDestroy(Sender: TObject);

 private
   { Private declarations }
   MyThread1 : TMyThread; // thread number 1
   MyThread2 : TMyThread; // thread number 2
   Thread1Active : boolean; // used to test if thread 1 is active
   Thread2Active : boolean; // used to test if thread 2 is active
   procedure ThreadDone(var AMessage : TMessage); message WM_ThreadDoneMsg; // Message to be sent back from thread when its done
 public
   { Public declarations }

 end;

var
 Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject); // Create Thread 1
{ The thread will destroy iteself when it is done executing because FreeOnTerminate is set to true.
The first paramter is the priority, and the second is the progressbar to update.
}
begin
  if (MyThread1 = nil) or (Thread1Active = false) then // make sure its not already running

  begin
    MyThread1 := TMyThread.CreateIt(TrackBar1.Position, ProgressBar1);
    Thread1Active := true;
  end
  else
    ShowMessage("Thread still executing");
end;

procedure TForm1.Button2Click(Sender: TObject); // Create Thread 2
begin
  if (MyThread2 = nil) or (Thread2Active = false) then  // make sure its not already running
  begin
    MyThread2 := TMyThread.CreateIt(TrackBar2.Position, ProgressBar2);

    Thread2Active := true;
  end
  else
    ShowMessage("Thread still executing");
end;

procedure TForm1.Button3Click(Sender: TObject); // Terminate Thread 1
begin
 if (MyThread1 <> nil) and (Thread1Active = true) then  // check to see if it is running
   MyThread1.Terminate
 else
  ShowMessage("Thread not started");
end;

procedure TForm1.Button4Click(Sender: TObject); // Terminate Thread 2

begin
 if (MyThread2 <> nil) and (Thread2Active = true) then  // check to see if it is running
   MyThread2.Terminate
 else
   ShowMessage("Thread not started");
end;

procedure TForm1.ThreadDone(var AMessage: TMessage); // keep track of when and which thread is done executing
begin
 if ((MyThread1 <> nil) and (MyThread1.ThreadID = cardinal(AMessage.WParam))) then

 begin
     Thread1Active := false;
 end;
 if ((MyThread2 <> nil) and (MyThread2.ThreadID = cardinal(AMessage.WParam))) then
 begin
     Thread2Active := false;
 end;
end;

procedure TForm1.FormCreate(Sender: TObject); // initialize to zero
begin
 Thread1Active := false;
 Thread2Active := false;
end;

procedure TForm1.TrackBar1Change(Sender: TObject); // set Thread 1 Priority

begin
 if (MyThread1 <> nil) and (Thread1Active = true) then
    MyThread1.priority := TThreadPriority(TrackBar1.Position);
end;

procedure TForm1.TrackBar2Change(Sender: TObject); // set Thread 2 Priority
begin
 if (MyThread2 <> nil) and (Thread2Active = true) then
   MyThread2.priority := TThreadPriority(TrackBar2.Position);
end;

procedure TForm1.FormDestroy(Sender: TObject); // Terminate any threads still running

begin
  if (MyThread1 <> nil) and (Thread1Active = true) then
  begin
    MyThread1.Terminate;
    MyThread1.WaitFor;  // wait for it to terminate
  end;
  if (MyThread2 <> nil) and (Thread2Active = true) then
  begin
    MyThread2.Terminate;
    MyThread2.WaitFor;
  end;
end;

end.


 
Zagaevskiy ©   (2007-08-03 19:58) [3]

МДа ... закинул, млин.



Страницы: 1 вся ветка

Текущий архив: 2007.08.26;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.022 c
8-1163478013
Tab
2006-11-14 07:20
2007.08.26
квадрат с вращением в OpenGL


2-1186066654
JaK[Light]
2007-08-02 18:57
2007.08.26
Потоки и volatile


15-1185443684
Cerberus
2007-07-26 13:54
2007.08.26
Symbian


15-1185303927
arnage
2007-07-24 23:05
2007.08.26
АРхиватор


15-1185772722
boriskb
2007-07-30 09:18
2007.08.26
Поздравим.