![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Запустить TThread повторно?
Cobalt © (2009-02-21 15:14:00)Есть у меня один поток, который обходит каталоги, считает контрольные суммы файлов.
Но каждый раз после окончания работы приходится пересоздавать объект :-(
Вопрос такой: можно ли после окончания исполнения потока повторно использовать объект TThread ?
Например, запустив его метод Create - будет ли создан новый объект TThread, который повиснет в памяти, или он только отработает свой код, заново запустив WinAPI-ый поток исполняться?
Тын-Дын (2009-02-22 02:45:00) [21]
> Медвежонок Пятачок © (22.02.09 02:41) [68]
> Трындеть я тоже могу сколько угодно.продолжай трындеть.а
> евенты здесь нахрен не нужны.и я это показал.
Нет, не показал. Только потрындел.
Код показан в [4].
Приведи класс полностью. Тогда можно будет говорить - показал или нет.
А сейчас - только разговор неконкретный.
Медвежонок Пятачок (2009-02-22 02:44:00) [22]Неправда.
Автор хотел нечто другое.
Дословно:
> можно ли после окончания исполнения потока повторно использовать
> объект TThread ?
Повторное использование в данном случае - выполнение уже созданным потоком некоторой работы без создания нового потока.
у меня один поток в одном экземпляре после первого прогона повторно выполняет некторую работу по клику без создания нового потока.
и без дурацких евентов.
Медвежонок Пятачок (2009-02-22 02:44:00) [23]а еще и код в три раза компактнее дурацкого примера с евентами
Медвежонок Пятачок (2009-02-22 02:41:00) [24]Трындеть я тоже могу сколько угодно.
продолжай трындеть.
а евенты здесь нахрен не нужны.
и я это показал.
Медвежонок Пятачок (2009-02-22 02:40:00) [25]у меня преподавательский зуд много лет как прошел.
Тын-Дын (2009-02-22 02:40:00) [26]
> ну передам я ему под кнопкой пойнтер с кучей полей в которых
> данные и указатели на мильон разных процедур и тыщщу колбаков
> и разбужу.
Ну так передай. Покажи класс.
Тын-Дын (2009-02-22 02:39:00) [27]Трындеть я тоже могу сколько угодно.
В коде в начале ветки не зря используются те же эвенты.
И приведён полныйрабочий код.
И его немного.
Медвежонок Пятачок (2009-02-22 02:38:00) [28]При этом кто сказал, что поток сразу же должен выполнять некую полезную работу?
Он должен дождаться, когда ему передадут процедуру для выполнения и скомандуют об этом.
ну передам я ему под кнопкой пойнтер с кучей полей в которых данные и указатели на мильон разных процедур и тыщщу колбаков и разбужу.
и все будет замечательно вертеться крутиться без евентов-моментов
Тын-Дын (2009-02-22 02:37:00) [29]
> Медвежонок Пятачок © (22.02.09 02:35) [61]
> Кроме того, выполняется всё один и тот же цикл в поточной
> функции.ну что за детсад? я могу запустить хоть тысячу разных
> алгоритмов с каждым новым нажатием кнопки. приведен просто
> пример нитки с подобием полезной работы<
Вот не надо "некоего подобия".
Приведи рабочий, код, а не выжимки из него, который будет выполнять нужные задачи.
Тын-Дын (2009-02-22 02:36:00) [30]
> Медвежонок Пятачок © (22.02.09 02:33) [59]
> ну да. именно так и хотел автор
Неправда.
Автор хотел нечто другое.
Дословно:
> можно ли после окончания исполнения потока повторно использовать
> объект TThread ?
Повторное использование в данном случае - выполнение уже созданным потоком некоторой работы без создания нового потока.
Медвежонок Пятачок (2009-02-22 02:35:00) [31]Кроме того, выполняется всё один и тот же цикл в поточной функции.
ну что за детсад? я могу запустить хоть тысячу разных алгоритмов с каждым новым нажатием кнопки. приведен просто пример нитки с подобием полезной работы
Тын-Дын (2009-02-22 02:34:00) [32]При этом кто сказал, что поток сразу же должен выполнять некую полезную работу?
Он должен дождаться, когда ему передадут процедуру для выполнения и скомандуют об этом.
Медвежонок Пятачок (2009-02-22 02:33:00) [33]ну да. именно так и хотел автор
хотя можно сделать как хочется. и без всяких евентов.
Тын-Дын (2009-02-22 02:32:00) [34]Кроме того, выполняется всё один и тот же цикл в поточной функции.
Это ведь тоже неправильно?
Тын-Дын (2009-02-22 02:30:00) [35]Сразу маленькая такая ошибка:
> procedure TForm1.Button1Click(Sender: TObject);begin if
> t = nil then t:= TBearPigletThread.CreateIt(Handle) else
> t.Resume; Button1.Enabled := False;end;
Здесь вот этот код -if t = nil then t:= TBearPigletThread.CreateIt(Handle) else t.Resume;, а именноt.Resumeсработает только в том случае, если поток уже "спит".
Это ведь неправильно? Не так ли?
Медвежонок Пятачок (2009-02-22 02:26:00) [36]не менее волшебный и без циклов и без евентов
procedure TBearPigletThread.Execute;
var i : integer;
begin
while not Terminated do
begin
for i := 1 to 10 do //Полезная работа
begin
PostMessage(fHandle,WM_TEST,0,i);
Sleep(300);
end;
if SendMessage(fHandle,WM_TEST,1,0) = 0 then Suspend;
end;
end;
procedure TForm1.OnMsg(var AMsg: TMessage);
begin
case AMsg.WParam of
0 : ListBox1.Items.Add(IntToStr(AMsg.LParam));
1 : begin
Button1.Enabled := True;
AMsg.Result := 0;
end;
end;
end;
var t : TThread = nil;
procedure TForm1.Button1Click(Sender: TObject);
begin
if t = nil then t:= TBearPigletThread.CreateIt(Handle) else t.Resume;
Button1.Enabled := False;
end;
Тын-Дын (2009-02-22 02:17:00) [37]
> Медвежонок Пятачок © (22.02.09 02:10) [54]
> Ты показал только стандартный цикл в методе Execute и обмен
> с оконной процедурой. Не более того.С ожиданием евента цикл
> будет нестандартный а волшебный?
Код в [4] выполняет задачу.
Твой - нет.
Вот потому тот код и волшебный.
Медвежонок Пятачок (2009-02-22 02:10:00) [38]Ты показал только стандартный цикл в методе Execute и обмен с оконной процедурой. Не более того.
С ожиданием евента цикл будет нестандартный а волшебный?
Тын-Дын (2009-02-22 02:09:00) [39]
> Медвежонок Пятачок © (22.02.09 02:05) [51]
> я же показал уже
Ты показал только стандартный цикл в методе Execute и обмен с оконной процедурой. Не более того.
Медвежонок Пятачок (2009-02-22 02:09:00) [40]в обработчике формы либо выводим мессадждиалог и по нему присваиваем Msg.Result, либо по флагу, который взводится кнопкой.
и все крутится вертится.
но это для извращенцев. как и вариант с ожиданием евента.
когда считаешь црц файлов, на нитке не наэкономишь все равно.