![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Потоки... ; ;HELP ! [D3, Win95/98, WinME, Win2k]
Корса © (2001-12-04 13:10:00)Привет всем...
В какой-то момент работы программы по таймеру (ну предположим раз в минуту.. не важно) запускается подпрограмма... НО.. обработка довольно сложная и иногда занимает время... Так вот вопрос.. как бы запускать эту подпрограмму отдельным потоком, чтобы не влиять на основную программу?
КОРСА (2001-12-06 18:12:00) [1]ммм.. почему то на FindFirst (в первых строчках WORK) компьютер сразу виснет.. хотя при обычном запуске процедуры все работает как положено?
Юрий Зотов (2001-12-05 11:16:00) [2]> что происходит с этим потоком дальше?
1. Поток, как объект ядра Windows - автоматически уничтожается системой.
2. Поток, как объект Delphi (то есть, как экземпляр класса TThread) - продолжает висеть в памяти. Чтобы при завершении метода Execute он тоже уничтожался автоматически, сразу после его создания установите FreeOnTerminate := True.
3. При завершении ВСЕЙ программы (то есть, при завершении ее главногопотока) система автоматически уничтожает все ее потоки и освобождает всЮ занимаемую ею память.
И еще.
1. Зачем нужен метод MyThread.Work? Разве нельзя написать нужный код прямо в методе Execute?
2. Переменная WorkThread - тоже лишняя. Почему бы не сделать проще?
MyThread.Create(False).FreeOnTerminate := True;
Корса (2001-12-05 11:13:00) [3]Во! то, что доктор прописал! спасибо.. :)
panov (2001-12-05 11:09:00) [4]В MyThread.Create указываешь:
FreeOnTerminate := True;
И поток освободит ресурсы сам после окончания работы.
Корса (2001-12-05 10:55:00) [5]В том смысле,что когда все мои расчеты внутри WorkThread:=MyThread.Create(False); отрабатывают, что происходит с этим потоком дальше?
Владислав (2001-12-04 15:42:00) [6]Какая задача? Что ты под этим подразумеваешь?
Корса (2001-12-04 15:07:00) [7]все работает, только вопрос.. задача завершается самостоятельно или лучше все-таки ее завершить самому? Вообщем какой механизм работы.. ?
Корса (2001-12-04 14:01:00) [8]Спасибо.. попробую..
С уважением,
Игорь
vgy765 (2001-12-04 13:25:00) [9]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 13:24:00) [10]TYourTread.Create(False);