Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2002.03.11;
Скачать: [xml.tar.bz2];

Вниз

Потоки... 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.005 c
1-32483
kirill2000
2002-02-23 15:24
2002.03.11
Архивация


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


14-32554
Shuler
2002-01-26 20:07
2002.03.11
Разомнёмся!


14-32551
MJH
2002-01-26 11:31
2002.03.11
MSVCR70.DLL


7-32591
Dmitry V. Averuanov
2001-09-24 14:22
2002.03.11
Как выключить компьютер по Windows 2000





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский