![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
потоки текут [D5]
jorh © (2002-01-15 14:32:00)пиплы просвятите : есть такая штука в File\New.. ThreadObject.
Могу ли я использовать ее для создания нескольких потоков или для каждого потока мне необходимо снова создавать ThreadObject
Digitman (2002-01-15 17:05:00) [1]>eraser
Общая концепция такова :
если объекты класса TSmall хотят изменить поведение, по-умолчанию определенное методом "родителя" (TBigThread.Execute), то необходимо переопределить метод TSmall.Execute с целью реализации иного поведения наследника. Иначе - поведение наследника будет в точности повторять поведение предка
panov (2002-01-15 16:24:00) [2]Пример:
-------------
TMyThread := class(TThread)
private
FFirstPar: String;
FNextPar: String;
public
constructorCreate(const FirstParameter, NextParameter: String);
end;
А при реализации конструктора можно использовать эти параметры:
constructor TMyThread.Create(const FirstParameter, NextParameter: String);
begininherited Create( True);
FreeOnTerminate := True;
FFirstPar := FirstParameter; //Инициализация переменных
FNextPar := NextParameter;
Resume; //Переводим поток в состояние «Активный»
//Далее в процедуре Execute используем эти полученные параметры.
end;
procedureTMyThread.Execute;
begin
...
ifFFirstPar=... then...
ifFNextPar=... then...
...
end;
Создание потоков:
TMyThread.Create("First","Вася");
TMyThread.Create("First","Петя");
eraser (2002-01-15 16:21:00) [3]с классами то понятно. Вы мне тормозу просто скажите Execute с моим кодом мне написать 1 раз для родительского класса
TBigThread= class(TThread)
protected
procedure Execute; override;
или в каждом TSmall = class(TBigThread)писать Execute????
Простите за ламерство просто с потоками никогда не работал
Digitman (2002-01-15 16:13:00) [4]>eraser
Вот ты , к примеру, <eraser>. И класс у тебя - TEraser. И дети твои тоже унаследуют твой класс - TEraser. И гены их будут тоже твои (читай - код, твой генетический, непереопределенный ими Execute). И генетическое поведение их тоже будет как у тебя, потому что они - ЭКЗЕМПЛЯРЫ КЛАССА, по образу и подобию которого ты их состругал.
eraser (2002-01-15 16:06:00) [5]не понимаю или туплю
NailS (2002-01-15 16:01:00) [6]Так же как и для кнопок, TButton класс один
Button1 ... и т.д. может быть много.
Создаются разные объекты одного класса.
eraser (2002-01-15 15:56:00) [7]торможу!! взял для примера Thread из Demos. мучаюсь но все равно не могу никак понять. Описываются разные потоки одного класса и код то разный в каждом потоке (вызывается процедура для каждого потока procedure Tthread1.Sort
procedure Tthread2.Sort)
а мне влом писать код 3 раза (его у меня ого-го)
как не пойму чтобы потоков было несколько а код один?
Digitman (2002-01-15 15:34:00) [8]разумеется !
eraser (2002-01-15 15:32:00) [9]эти результаты необходимо мне взять через какое либо объявленное свойство потока ??
Юрий Зотов (2002-01-15 15:22:00) [10]И посмотрите класс TThreadList - может пригодиться.
Digitman (2002-01-15 15:19:00) [11]соответственно - ответ : поскольку потоки одного класса, каждый из них может хранить рез-ты своей работы в своем экз-ре класса
eraser (2002-01-15 15:04:00) [12]исправьте меня если не прав:
1.создать ThreadObject
2. в Execute написать мой код
3. когда делаю Create потока то пишу нужные данные
соответственно вопрос поток то нужен не один как мне создать другой с этим же кодом и как получить результат из каждого потока
Владислав (2002-01-15 14:55:00) [13]> eraser (15.01.02 14:52)
Передавай эти данные потоку в конструкторе.
eraser (2002-01-15 14:52:00) [14]а если наоборот- могу ли я сделать так чтобы один и тот же код выполнялся в разных потоках без переписывания кода . у меня меняются только входные и выходные данные а способ обработки идет непрерывно и он одинаковый.
Владислав (2002-01-15 14:41:00) [15]Можно создать несколько экземпляров.
panov (2002-01-15 14:40:00) [16]В модуле описываешь несколько своих классов потомков TThread. Все можно делать в одном модуле.