Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как в потоке FreeOnTerminate визвать процедуру Mai, Имеетcа 2 модуля: 1-Маин 2-TThread  
V
    Опции темы
Mersik
  Дата 8.10.2007, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 15.1.2007
Где: Latvija, Riga

Репутация: 1
Всего: 0



Имеется 2 модуля: 1-Маин 2-TThread .Как в потоке FreeOnTerminate из модуля TThread  вызвать процедуру MainForm.xxx из модуля Маин  ?

FreeOnTerminate:=MainForm.Procedure_name;

почему то не работает.
PM MAIL WWW   Вверх
Alix
Дата 8.10.2007, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


L45
**


Профиль
Группа: Участник
Сообщений: 581
Регистрация: 4.5.2005
Где: Pskov/Spb

Репутация: 8
Всего: 23



потому что 
Код

  ThreadVariable.OnTerminate := MainForm.Procedure_name



--------------------
Знание только тогда знание, когда оно приобретено усилиями своей мысли, а не памятью (с) Л. Толстой
High tech. Low live. (с) Gardner Dozois
PM MAIL ICQ Skype   Вверх
Mersik
  Дата 9.10.2007, 08:40 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 15.1.2007
Где: Latvija, Riga

Репутация: 1
Всего: 0



Неа! маин Модул 
Код

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Label2: TLabel;
    procedure Button4Click(Sender: TObject);
    procedure Dones(Sender:TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
   Function Label_input:integer;
var
  Form1: TForm1;
  Answer:integer;

 
implementation

{$R *.dfm}

procedure TForm1.Button4Click(Sender: TObject);
var NewThread:TTestingThread;
begin
    NewThread := TTestingThread.Create(False);
end;





 smile 

Код

unit Unit2;

interface

uses
  Classes;

type
  TTestingThread = class(TThread)
  private
    //Answer:Integer;
    { Private declarations }
  protected
    procedure GiveAnswer;
    procedure Execute; override;
  end;

implementation
uses SysUtils,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 TTestingThread.UpdateCaption;
    begin
      Form1.Caption := 'Updated in a thread';
    end; }

{ TTestingThread }
Procedure TTestingThread.GiveAnswer;
begin
  Form1.Label1.Caption:=IntToStr(Answer);
end;

procedure TTestingThread.Execute;
var i:integer;
begin
  FreeOnTerminate:=Form1.Dones();    ///<-- ERROR HERE ! Help :dash1 
  { Place thread code here }
  for i:=1 to 100000 do
    begin
     // if Terminated then
      //  Break;

       inc(Answer,Round(Abs(Sin(Sqr(i)))));
       Synchronize(GiveAnswer);
    end;
end;

end.


Добавлено через 1 минуту и 3 секунды
FreeOnTerminate:=Form1.Dones(); 
Error, почему Форма видна но не видна не одна процедура ? 
PM MAIL WWW   Вверх
Alix
Дата 9.10.2007, 11:09 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


L45
**


Профиль
Группа: Участник
Сообщений: 581
Регистрация: 4.5.2005
Где: Pskov/Spb

Репутация: 8
Всего: 23



Цитата(Mersik @  9.10.2007,  09:40 Найти цитируемый пост)
Неа! маин Модул 

Очень даже АГА! Смотри внимательно что я тебе написал! Или смотри сюда:
Код
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    myThread : TMersikThread;
    procedure onMyThreadTerminate(Sender: TObject);
  public

  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  myThread := TMersikThread.Create(true);
  myThread.OnTerminate := onMyThreadTerminate;
  myThread.FreeOnTerminate := true;
  myThread.Resume;
end;

procedure TForm1.onMyThreadTerminate(Sender: TObject);
begin
  Showmessage('I was terminated, bye-bye!');
  myThread := nil;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  if Assigned(myThread) then
    myThread.Terminate;
end;

end.


Код
unit Unit2;

interface

uses
  Classes;

type
  TMersikThread = class(TThread)
  private
    Answer:Integer;
    procedure GiveAnswer;
  protected
    procedure Execute; override;
  public
    constructor Create(CreateSuspended: boolean);
  end;

implementation

uses unit1, SysUtils;

{ TMersikThread }

constructor TMersikThread.Create(CreateSuspended: boolean);
begin
  answer := 0;
  inherited Create(CreateSuspended);
end;

procedure TMersikThread.Execute;
var
  i : integer;

begin
  for i := 1 to 100000 do begin
    if Terminated then
      Break;
    inc(answer, Round(Abs(Sin(Sqr(i)))));
    Synchronize(GiveAnswer);
  end;
end;

procedure TMersikThread.GiveAnswer;
begin
  Form1.Label1.Caption := IntToStr(Answer);
end;

end.



Это сообщение отредактировал(а) Alix - 9.10.2007, 11:12


--------------------
Знание только тогда знание, когда оно приобретено усилиями своей мысли, а не памятью (с) Л. Толстой
High tech. Low live. (с) Gardner Dozois
PM MAIL ICQ Skype   Вверх
aktuba
Дата 9.10.2007, 11:15 (ссылка) |  (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

Репутация: 7
Всего: 38



Mersik, полгода прошло, но книжку ты так и не купил!!! FreeOnTerminate только указывает потоку, что при завершении необходимо самого себя удалить. OnTerminate - какой код перед этим выполнить...

P.S.: прежде чем задавать глупые вопросы - почитай умные книжки...


--------------------
user posted image
PM MAIL WWW Skype   Вверх
Mersik
  Дата 9.10.2007, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 15.1.2007
Где: Latvija, Riga

Репутация: 1
Всего: 0



Aktuba посоветуй хорошую для меня !

Alix огромное спасибо!

 smile 
PM MAIL WWW   Вверх
EvilsInterrupt
Дата 9.10.2007, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

Репутация: нет
Всего: 9



Mersik, Читай ман в переводе от Петровича про потоки, большой зараза, но полезный! Искать в отделении про винды32
PM MAIL WWW ICQ Jabber   Вверх
aktuba
Дата 9.10.2007, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

Репутация: 7
Всего: 38



Цитата

Aktuba посоветуй хорошую для меня !


Судя по данному вопросу - вообще любая, где есть хоть поверхностная инфа про потоки.


--------------------
user posted image
PM MAIL WWW Skype   Вверх
Mersik
  Дата 10.10.2007, 08:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 15.1.2007
Где: Latvija, Riga

Репутация: 1
Всего: 0



 smile 

Great Thanks !
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0875 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.