Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.03.11;
Скачать: CL | DM;

Вниз

Потоки... HELP !   Найти похожие ветки 

 
Корса   (2001-12-04 13:10) [0]

Привет всем...

В какой-то момент работы программы по таймеру (ну предположим раз в минуту.. не важно) запускается подпрограмма... НО.. обработка довольно сложная и иногда занимает время... Так вот вопрос.. как бы запускать эту подпрограмму отдельным потоком, чтобы не влиять на основную программу?


 
Владислав ©   (2001-12-04 13:24) [1]

TYourTread.Create(False);


 
vgy765   (2001-12-04 13:25) [2]

type
MyThread = class(TThread)
procedure Execute; override;
procedure Work;
end;

implemetation

procedure MyThread.Execute;
begin
Work;
end;

procedure MyThread.Work;
begin
{То что нужно выполнять}
end;

procedure Timer1.Timer() <-не помню точно но стандартная по таймеру
var
WorkThread:Mythread;
begin
WorkThread:=MyThread.Create(False);
end;

Вот так должно точно работать.


 
Корса   (2001-12-04 14:01) [3]

Спасибо.. попробую..

С уважением,
Игорь


 
Корса   (2001-12-04 15:07) [4]

все работает, только вопрос.. задача завершается самостоятельно или лучше все-таки ее завершить самому? Вообщем какой механизм работы.. ?


 
Владислав ©   (2001-12-04 15:42) [5]

Какая задача? Что ты под этим подразумеваешь?


 
Корса   (2001-12-05 10:55) [6]

В том смысле,что когда все мои расчеты внутри WorkThread:=MyThread.Create(False); отрабатывают, что происходит с этим потоком дальше?


 
panov ©   (2001-12-05 11:09) [7]

В MyThread.Create указываешь:

FreeOnTerminate := True;

И поток освободит ресурсы сам после окончания работы.


 
Корса   (2001-12-05 11:13) [8]

Во! то, что доктор прописал! спасибо.. :)


 
Юрий Зотов ©   (2001-12-05 11:16) [9]

> что происходит с этим потоком дальше?

1. Поток, как объект ядра Windows - автоматически уничтожается системой.

2. Поток, как объект Delphi (то есть, как экземпляр класса TThread) - продолжает висеть в памяти. Чтобы при завершении метода Execute он тоже уничтожался автоматически, сразу после его создания установите FreeOnTerminate := True.

3. При завершении ВСЕЙ программы (то есть, при завершении ее главного потока) система автоматически уничтожает все ее потоки и освобождает всЮ занимаемую ею память.

И еще.

1. Зачем нужен метод MyThread.Work? Разве нельзя написать нужный код прямо в методе Execute?

2. Переменная WorkThread - тоже лишняя. Почему бы не сделать проще?
MyThread.Create(False).FreeOnTerminate := True;


 
КОРСА   (2001-12-06 18:12) [10]

ммм.. почему то на FindFirst (в первых строчках WORK) компьютер сразу виснет.. хотя при обычном запуске процедуры все работает как положено?



Страницы: 1 вся ветка

Текущий архив: 2002.03.11;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.007 c
14-32564
fliz
2002-01-25 12:05
2002.03.11
С днем СТУДЕНТА, господа! Предлагаю сделать перекличку - кто студент, пусть в этой ветки отметится.


6-32536
nimpo
2001-12-25 01:48
2002.03.11
net


1-32430
novomod
2002-02-16 10:37
2002.03.11
Курсор. Help.


14-32547
Blackweber
2002-01-15 01:24
2002.03.11
Срочно!!!Тем кто разбирается в компах!


14-32555
RUS1
2002-01-25 14:47
2002.03.11
Братья нужен простенький инсталятор на Delphi с исходными текстами!!