Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Запустить TThread повторно?


Страницы:   1 2 3 4 5

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, либо по флагу, который взводится кнопкой.

и все крутится вертится.
но это для извращенцев. как и вариант с ожиданием евента.
когда считаешь црц файлов, на нитке не наэкономишь все равно.


Страницы:   1 2 3 4 5

Наверх

Титульная страница Поиск, карта сайта Написать письмо