Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 25.02.2011, 17:43
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию передавать переменные в поток

Код:
 type
    TMyThread = class(TThread)
  private
    { Private declarations }
  protected
    procedure Execute(x1,x2: String; nomer: integer); reintroduce;
  public
    constructor Create(x1,x2: String; nomer: integer); overload;
end;

constructor TMyThread.Create(x1,x2: String; nomer: integer);
begin
   Create(True);
   FreeOnTerminate := True;
   Priority := tpNormal;
   Execute(x1,x2,nomer);
end;

procedure TMyThread.Execute(UIN,Msg: String; nomer: integer);
//тут сам код потока уже

нужно передавать пераменные в поток, вот у меня собственно вопрос все ли правильно сделал, тестировал вроде работает
Ответить с цитированием
  #2  
Старый 25.02.2011, 17:58
Аватар для v1s2222
v1s2222 v1s2222 вне форума
Продвинутый
 
Регистрация: 07.09.2010
Сообщения: 726
Репутация: 26711
По умолчанию

Ну думаю надо объявлять так:
Код:
 type
    TMyThread = class(TThread)
  private
    { Private declarations }
  protected
    procedure Execute(x1,x2: String; nomer: integer); reintroduce;
  public
    constructor Create(x1,x2: String; nomer: integer); {overload  не нужен}
...
Overload нужен только там, где надо объявить две или более функций с одинаковым названием.
__________________
Помогаю за Спасибо

Последний раз редактировалось v1s2222, 25.02.2011 в 18:06.
Ответить с цитированием
  #3  
Старый 25.02.2011, 18:21
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию

я просто думал мб я не правильно вызываю поток обычно Resume; надо но туда переменные не подставишь, спасибо
Ответить с цитированием
  #4  
Старый 25.02.2011, 18:38
Аватар для v1s2222
v1s2222 v1s2222 вне форума
Продвинутый
 
Регистрация: 07.09.2010
Сообщения: 726
Репутация: 26711
По умолчанию

Дак вы же сами предложили использовать reintroduce. Именно он и разрешает "переопределять" процедуру.
__________________
Помогаю за Спасибо
Ответить с цитированием
  #5  
Старый 25.02.2011, 18:49
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию

можете сказать подробней, просто он у меня ошибку писал я прочитал что нужно добавить reintroduce дабы не ругался а так понятия не имею что делает reintroduce.
Ответить с цитированием
  #6  
Старый 25.02.2011, 18:59
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Код:
type
  TMyThread = class(TThread)
  private
    iParam: Integer;
    sParam: String;
  protected
    procedure Execute; override;
  public
    constructor Create(iParam: Integer; sParam: String);
  end;

constructor TMyThread.Create(iParam: Integer; sParam: String);
begin
  inherited Create(True);
  Self.iParam:=iParam;
  Self.sParam:=sParam;
  Resume;
end;

procedure TMyThread.Execute;
begin
  while not Terminated do
  begin
//    iParam:=$ff;
//    sParam:='lost';
  end;
end;

Код:
TMyThread.Create($ff, 'lost');
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #7  
Старый 25.02.2011, 19:04
Аватар для v1s2222
v1s2222 v1s2222 вне форума
Продвинутый
 
Регистрация: 07.09.2010
Сообщения: 726
Репутация: 26711
По умолчанию

Reintroduce просто переопределяет функцию (процедуру). То бишь не выводит сообщение о перекрытии метода. В вашем случае метод Execute есть у класса TThread. А вы его переопределяете под ваши нужды.
__________________
Помогаю за Спасибо
Ответить с цитированием
  #8  
Старый 25.02.2011, 19:24
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию

благодарю за пояснение NumLock и v1s2222
Ответить с цитированием
  #9  
Старый 26.02.2011, 12:28
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию

чето мне кажется чтото не так у меня, через некоторое время начинает писать мол недостаточно памяти для работы, похоже они не удаляются чтоли потоки
Ответить с цитированием
  #10  
Старый 26.02.2011, 12:53
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

создай временно destructor и поставь в нем точку останова:
Код:
type
  TTitanicThread = class(TThread)
  public
    destructor Destroy; override;
  end;

{ TTitanicThread }

destructor TTitanicThread.Destroy;
begin
  inherited Destroy; //тут Breakpoint
end;
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #11  
Старый 26.02.2011, 13:00
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию

чтоб проверить разрушается ли?
Ответить с цитированием
  #12  
Старый 26.02.2011, 13:22
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию

не останавливается в том месте, хотя в потоке функция выполнилась, должно было разрушиться

Последний раз редактировалось ALexandr555, 26.02.2011 в 13:26.
Ответить с цитированием
  #13  
Старый 26.02.2011, 15:12
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию

а сделано моим способом выше, мб переделать под твой?
Ответить с цитированием
  #14  
Старый 26.02.2011, 17:23
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию

NumLock твоим способом вроде работает, но чтото форма глючит два memo пропадает и label на половину прикрыт, а при закрытии ошибка
Error. Code: 1400. Недопустимый дескриптор окна
Ответить с цитированием
  #15  
Старый 27.02.2011, 09:02
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Цитата:
Сообщение от ALexandr555
NumLock твоим способом вроде работает, но чтото форма глючит два memo пропадает и label на половину прикрыт, а при закрытии ошибка
Error. Code: 1400. Недопустимый дескриптор окна
у меня в примере нет форм, мем и лэйблов)
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 02:23.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025