Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2005.09.25;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.038 c
2-1124148257
rosl
2005-08-16 03:24
2005.09.25
xmldocument


2-1124027784
Андрей Молчанов
2005-08-14 17:56
2005.09.25
FreeAndNil(Form1) и Form1.Free


1-1125398831
Medved
2005-08-30 14:47
2005.09.25
Создание плагинов


14-1125088645
ronyn
2005-08-27 00:37
2005.09.25
Что означают в Делфи разделы privat, public.


14-1125007108
Fire Fox
2005-08-26 01:58
2005.09.25
Mozilla FireFox Несколько вопросов ...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский