Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.12.2016, 14:53   #11
denis76560
Форумчанин
 
Регистрация: 13.01.2010
Сообщений: 121
По умолчанию

неа, такая же тема =(
denis76560 вне форума Ответить с цитированием
Старый 16.12.2016, 14:55   #12
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

lдля проверки
Код:
destructor MyThread.Destroy;
begin
  Synchronize(Threadfree);
  inherited;
end;

procedure MyThread.Threadfree;
begin
Showmessage('Уничтожен');
end;
Если надпись будет то все норм с потоком, еще ищи в уничтожении буфера который у тебя в потоке если есть в destructor MyThread.Destroy; нужно уничтожать если есть такой буфер

Последний раз редактировалось Aliens_wolfs; 16.12.2016 в 14:58.
Aliens_wolfs вне форума Ответить с цитированием
Старый 16.12.2016, 14:59   #13
denis76560
Форумчанин
 
Регистрация: 13.01.2010
Сообщений: 121
По умолчанию

сделал так:
Код:
type
  MyThread = class(TThread)
  private
    Rezult : integer;
  public

  protected
    procedure Execute; Override;
    constructor Create(CreateSuspended: Boolean);
    destructor Destroy;
    procedure  Threadfree;
    procedure Sync;
end;




implementation

uses MainForm;

constructor MyThread.Create(CreateSuspended: Boolean);
begin
  inherited Create(CreateSuspended);
  FreeOnTerminate := True;
  if not CreateSuspended then
    Resume;
end;

procedure MyThread.Threadfree;
begin
Showmessage('Уничтожен;');
end;

destructor MyThread.Destroy;
begin
  Synchronize(Threadfree);
  inherited;
end;


procedure MyThread.Execute;
begin

rezult:=RandomRange(0,456546);

 Synchronize(Sync);
 Sleep(100);
 end;


procedure MyThread.Sync;
var
i:integer;
begin
Form1.memo1.Lines.Add(IntToStr(Rezult));
end;

end.
Запускаю так:

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
myThreadTmp: MyThread;
begin
myThreadTmp:=myThread.Create(false);
end;
Мессага не выскакивает об уничтожении потока.
Утечка остается..

Последний раз редактировалось denis76560; 16.12.2016 в 15:02.
denis76560 вне форума Ответить с цитированием
Старый 16.12.2016, 15:02   #14
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Покажи его запуск
и объяви так
Код:
 

type
  MyThread = class(TThread)
  private
    Rezult : integer;
  public

  protected
    procedure Execute; Override;
    constructor Create(CreateSuspended: Boolean); virtual; // здесь
    destructor Destroy; override;  // здесь 
    procedure  Threadfree;
    procedure Sync;
end;

Последний раз редактировалось Aliens_wolfs; 16.12.2016 в 15:08.
Aliens_wolfs вне форума Ответить с цитированием
Старый 16.12.2016, 15:08   #15
denis76560
Форумчанин
 
Регистрация: 13.01.2010
Сообщений: 121
По умолчанию

Вот что в итоге получилось:
Код:
unit Unit1;

interface

uses
  Classes, SysUtils,dialogs,math;

type
  MyThread = class(TThread)
  private
    Rezult : integer;
  public

  protected
    procedure Execute; Override;
    constructor Create(CreateSuspended: Boolean); virtual;
    destructor Destroy; override;
    procedure  Threadfree;
    procedure Sync;
end;

implementation

uses MainForm;

constructor MyThread.Create(CreateSuspended: Boolean);
begin
  inherited Create(CreateSuspended);
  FreeOnTerminate := True;
  if not CreateSuspended then
    Resume;
end;

procedure MyThread.Threadfree;
begin
Showmessage('Óíè÷òîæåí');
end;

destructor MyThread.Destroy;
begin
  Synchronize(Threadfree);
  inherited;
end;

procedure MyThread.Execute;
begin
 Randomize;
 rezult:=RandomRange(0,456546);
 Synchronize(Sync);
 Sleep(100);
 end;

procedure MyThread.Sync;
var
i:integer;
begin
Form1.memo1.Lines.Add(IntToStr(Rezult));
end;

end.
И запуск с главной формы:

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
myThreadTmp: MyThread;
begin
myThreadTmp:=myThread.Create(false);
end;
Ничего не изменилось, увы =(

Кода вроде кот наплакал, а столько времени уже с ним вожусь =(
denis76560 вне форума Ответить с цитированием
Старый 16.12.2016, 15:10   #16
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Код:

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

  type
  MyThread = class(TThread)
  private
    Rezult : integer;
  public

  protected
    procedure Execute; Override;
       constructor Create; virtual;
   destructor Destroy; override;
    procedure Sync;
    procedure Threadfree;
end;


 var
  Form1: TForm1;



{$R *.dfm}

implementation


constructor MyThread.Create;
begin
  inherited Create(false);
  FreeOnTerminate := True;
end;


destructor MyThread.Destroy;
begin
  Synchronize(Threadfree);
  inherited;
end;

procedure MyThread.Threadfree;
begin
Showmessage('Óíè÷òîæåí');
end;

procedure MyThread.Execute;
begin
  Randomize;
rezult:=RandomRange(0,456546);
Synchronize(Sync);
//sleep(100); и без этого работает
 end;


procedure MyThread.Sync;
var
i:integer;
begin
Form1.memo1.Lines.Add(IntToStr(Rezult));
end;

procedure TForm1.Button1Click(Sender: TObject);
var
myThreadTmp: MyThread;
begin
myThreadTmp:=myThread.Create;
end;
у меня работает

Последний раз редактировалось Aliens_wolfs; 16.12.2016 в 15:18.
Aliens_wolfs вне форума Ответить с цитированием
Старый 16.12.2016, 15:17   #17
denis76560
Форумчанин
 
Регистрация: 13.01.2010
Сообщений: 121
По умолчанию

Ооооооо !!!!!!!!! Есть еще светлые головы у нас в Питере и на этом форуме =)))
Спасибо огромное !!!!!
Сейчас копирнул все в один модуль, все ок сработало, утечек нет.. =))))
Правда не знаю почему у меня в том коде не срабатывает, может потому-что в другом модуле код потока, или косяк где-то в коде, сейчас по одной строчке буду сравнивать..
Еще раз спасибо ОГРОМНОЕ !!!
denis76560 вне форума Ответить с цитированием
Старый 16.12.2016, 15:19   #18
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Сейчас проверим в другом модуле
Aliens_wolfs вне форума Ответить с цитированием
Старый 16.12.2016, 15:22   #19
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

ТОЖЕ РАБОТАЕТ, Я И НЕ СОМНЕВАЛСЯ

Код:
unit Unit2;

interface

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

  type
  MyThread = class(TThread)
  private
    Rezult : integer;
  public
    procedure Execute; Override;
    constructor Create; virtual;
   destructor Destroy; override;
    procedure Sync;
    procedure Threadfree;
end;

implementation

uses
Unit1;

constructor MyThread.Create;
begin
  inherited Create(false);
  FreeOnTerminate := True;
end;


destructor MyThread.Destroy;
begin
  Synchronize(Threadfree);
  inherited;
end;

procedure MyThread.Threadfree;
begin
Showmessage('Уничтожен');
end;

procedure MyThread.Execute;
begin
  Randomize;
rezult:=RandomRange(0,456546);
Synchronize(Sync);
 end;


procedure MyThread.Sync;
var
i:integer;
begin
Form1.memo1.Lines.Add(IntToStr(Rezult));
end;

end.
Код:
unit Unit1;

interface

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

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




 var
  Form1: TForm1;



{$R *.dfm}

implementation

uses
Unit2;


procedure TForm1.Button1Click(Sender: TObject);
var
myThreadTmp: MyThread;
begin
myThreadTmp:=myThread.Create;
end;
Но лучше данные в Memo передавать через объекты, могу показать как это сделать

Последний раз редактировалось Aliens_wolfs; 16.12.2016 в 15:27.
Aliens_wolfs вне форума Ответить с цитированием
Старый 16.12.2016, 15:23   #20
denis76560
Форумчанин
 
Регистрация: 13.01.2010
Сообщений: 121
По умолчанию

Да, вероятнее всего где-то закралась нелепая машинальная ошибка, еще у себя пока не нашел.
denis76560 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Утечка памяти [Освобождение памяти массива] denis76560 Общие вопросы Delphi 4 27.11.2016 18:20
Освобождение памяти после запуска TOpenDialog t2skler Общие вопросы Delphi 8 14.09.2011 02:19
Освобождение памяти после исключения Syuf Общие вопросы C/C++ 10 28.05.2011 12:28
Освобождение памяти VadEr Общие вопросы Delphi 2 17.04.2009 22:23
Освобождение памяти AlexandrSid Общие вопросы Delphi 3 02.02.2009 13:45