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

Вниз

Простой вопрос по потокам (как его чёрт возьми запустить)   Найти похожие ветки 

 
alexandr-m ©   (2005-08-15 16:03) [0]

Создал простейшее приложение, форма на ней одна кнопка.
Затем добавляю в проект Thread Object:
File -> New -> Other -> Thread Object

в нём в теле экзекуции добавляю то что мне нужно сделать в этом потоке: Form1.Caption := "Updated in a thread";

Вопрос: что мне нужно написать в кнопке на Form1 чтобы запустить на выполнение этот поток??

далее читаю в документации:
>Приоритеты имеют значения от 0 до 31. Приоритет потока может >отличаться от приоритета породившего его процесса на плюс-минус >две единицы.

а где эту чифру вписывать они как всегда написать забыли.

ниже исходный код того приложения которое я создал:

unit Unit1;

interface

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

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

var
 Form1: TForm1;

implementation
uses unit2;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
что сдесь написать?
end;

end.

***************************************************************

unit Unit2;

interface

uses
 Classes {$IFDEF MSWINDOWS} , Windows {$ENDIF};

type
 testthread = class(TThread)
 private
   procedure SetName;
 protected
   procedure Execute; override;
 end;

implementation

uses unit1;

{ Important: Methods and properties of objects in visual components can only be
 used in a method called using Synchronize, for example,

     Synchronize(UpdateCaption);

 and UpdateCaption could look like,

   procedure testthread.UpdateCaption;
   begin
     Form1.Caption := "Updated in a thread";
   end; }

{$IFDEF MSWINDOWS}
type
 TThreadNameInfo = record
   FType: LongWord;     // must be 0x1000
   FName: PChar;        // pointer to name (in user address space)
   FThreadID: LongWord; // thread ID (-1 indicates caller thread)
   FFlags: LongWord;    // reserved for future use, must be zero
 end;
{$ENDIF}

{ testthread }

procedure testthread.SetName;
{$IFDEF MSWINDOWS}
var
 ThreadNameInfo: TThreadNameInfo;
{$ENDIF}
begin
{$IFDEF MSWINDOWS}
 ThreadNameInfo.FType := $1000;
 ThreadNameInfo.FName := "changecaption";
 ThreadNameInfo.FThreadID := $FFFFFFFF;
 ThreadNameInfo.FFlags := 0;

 try
   RaiseException( $406D1388, 0, sizeof(ThreadNameInfo) div sizeof(LongWord), @ThreadNameInfo );
 except
 end;
{$ENDIF}
end;

procedure testthread.Execute;
begin
 SetName;
 { Place thread code here }

 Form1.Caption := "Updated in a thread";
end;

end.


 
alex-drob ©   (2005-08-15 16:13) [1]

Точно не знаю, но помоему из procedure testthread.Execute нелзя обращаться напрямую к форме.
Раскаментируй
procedure testthread.UpdateCaption;
  begin
    Form1.Caption := "Updated in a thread";
  end;

и вызывай эту процедуру.


 
alexandr-m ©   (2005-08-15 16:17) [2]

как вызывать???


 
alexandr-m ©   (2005-08-15 16:19) [3]

раскоментировал, даёт ошибку undeclared identifier "UpdateCaption"


 
Eraser ©   (2005-08-15 16:20) [4]

alexandr-m ©   (15.08.05 16:17) [2]

Synchronize(UpdateCaption);


 
Gydvin ©   (2005-08-15 16:21) [5]

http://delphimaster.net/view/2-1123470571/

Может поможет


 
alex-drob ©   (2005-08-15 16:22) [6]

procedure testthread.Execute;
begin
SetName;
Synchronize(UpdateCaption);
end;


 
alexandr-m ©   (2005-08-15 16:38) [7]

кто нибудь может привести исправленные unit1 и unit2 чтобы этот элементарный пример заработал?


 
alexandr-m ©   (2005-08-15 16:51) [8]

спасибо Gydvin всё заработало!



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

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

Наверх




Память: 0.49 MB
Время: 0.027 c
2-1124293485
Гость22
2005-08-17 19:44
2005.09.25
Как можна сделать, чтоб при нажатии на Enter, курсор переходил


14-1125154722
psa247
2005-08-27 18:58
2005.09.25
Дыра в ядре 2000


14-1125275504
Джо
2005-08-29 04:31
2005.09.25
Загадка Дж. Литлвуда


14-1125082478
raymond
2005-08-26 22:54
2005.09.25
Прграмма - репозиторий данных


9-1116830673
Slavikk
2005-05-23 10:44
2005.09.25
GLScene - стрельба