Главная страница
    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.004 c
3-32401
Balim
2002-02-12 12:24
2002.03.11
Свои заголовки в кнопках DBNavigator


14-32574
FireMan
2002-01-25 10:25
2002.03.11
Где винда хранит пароли


6-32532
Dok_3D
2001-12-24 08:04
2002.03.11
COM+


4-32601
DarkReign
2001-11-29 17:50
2002.03.11
Как получить HWND задачи?


14-32565
Dimitry_I
2002-01-28 14:50
2002.03.11
Помогите, очень прошу





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский