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

Вниз

Как закрыть программу?   Найти похожие ветки 

 
serg128   (2005-07-21 18:06) [0]

Т.е. написал процедуру, в которой бесконечный цикл (ну надо так).
Создал TThread, и впихнул его туда. Всё работает хорошо, загрузка проца минимальна, но, при закрытии основного окна, программа не умирает! В обработчике OnClose написано так:
    b.Terminate;
    b.Resume;
    b.Free;
    Close;
    Action := caFree;
// b- это указатель на TThread
Как закрыть программу?


 
Fay ©   (2005-07-21 18:09) [1]

2 serg128   (21.07.05 18:06)
Close - это что?


 
Юрий Зотов ©   (2005-07-21 18:18) [2]

В цикле должна быть проверка Terminated, иначе Terminate ничего не даст.


 
serg128   (2005-07-21 18:26) [3]

Проверка на terminated ничего не дала


 
ki11er   (2005-07-21 18:28) [4]

...
b.Terminate;
WaitForSingleObject(b.Handle ... )
...


 
Юрий Зотов ©   (2005-07-21 18:32) [5]

> serg128   (21.07.05 18:26) [3]

Чудес не бывает. Код цикла - в студию, плз.

Вместо b.Free я бы использовал FreeOnTerminate - пусть уничтожает сам себя, он сам разберется.


 
ki11er   (2005-07-21 18:32) [6]

сам трэд должен выглядеть примерно так:

while not Terminated do begin
 ...
 Sleep(1)
end;


 
Fay ©   (2005-07-21 18:34) [7]

2 ki11er   (21.07.05 18:32) [6]
Зачем Sleep и почему (1)?


 
ki11er   (2005-07-21 18:38) [8]

>Зачем Sleep?
Крутые пацаны пишут трэды без слип, конечно же ;-)

>и почему (1)?
Просто для примера.


 
Юрий Зотов ©   (2005-07-21 19:09) [9]

> Fay ©   (21.07.05 18:34) [7]

> Зачем Sleep и почему (1)?

Такой вызов используется, когда скорость выполнения цикла неважна. Он передает остатот кванта времени другим потокам и при слишком быстром цикле позволяет уменьшить загрузку CPU.

Напишите такой Execute:

while not Terminated do
 Sleep(1)

и сравните загрузку CPU в этом варианте и в варианте с пустым циклом, без Sleep(1).


 
Fay ©   (2005-07-21 19:18) [10]

2 Юрий Зотов ©   (21.07.05 19:09) [9]

Огромное спасибо! Правда, я и так знаю, что такое Sleep.
Меня интересовало другое - зачем он нужен в данном случае?
Я (по наивности, видимо) думал, что код пишется для того, что нужно, а не для того, что не нужно...

Шутки ради сравнил нагрузку - она не изменилась. Просто потому, что я запустил несколько разных "грузилок". 8)


 
Fay ©   (2005-07-21 19:19) [11]

2 Юрий Зотов ©   (21.07.05 19:09) [9]
> Такой вызов используется, когда скорость выполнения
> цикла неважна. Он передает остатот кванта времени
> другим потокам и при слишком быстром цикле позволяет
> уменьшить загрузку CPU.

Почему тогда не Sleep(0)?


 
Fay ©   (2005-07-21 19:20) [12]

2 Юрий Зотов ©   (21.07.05 19:09) [9]
Привет от Дениса Левшина (Эльбрус)!


 
Юрий Зотов ©   (2005-07-21 19:36) [13]

> Fay © (21.07.05 19:20) [12]

Опа! Неожиданно.

Привет Денису тоже! Надеюсь, все ОК?


 
Fay ©   (2005-07-21 19:48) [14]

2 Юрий Зотов ©   (21.07.05 19:36) [13]
Денис у нас не очень давно. Ему, похоже, нравится.
Очень ценный кадр!


 
Юрий Зотов ©   (2005-07-21 19:52) [15]

> Fay ©   (21.07.05 19:48) [14]

Эт-точно. Вполне согласен. Можно передать, что его система кэширования шаблонов вполне успешно живет и работает.


 
Fay ©   (2005-07-21 20:03) [16]

2 Юрий Зотов ©   (21.07.05 19:52) [15]
Да, с кешированием у него всё в порядке! 8)



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

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

Наверх




Память: 0.5 MB
Время: 0.038 c
8-1112336983
Руслана
2005-04-01 10:29
2005.08.07
Источник записи


5-1092211388
segor
2004-08-11 12:03
2005.08.07
События свойства компонента


4-1118032871
Салават
2005-06-06 08:41
2005.08.07
описание файлов


14-1121556828
anonym
2005-07-17 03:33
2005.08.07
HOWTO


14-1121419058
leonidus
2005-07-15 13:17
2005.08.07
Знатокам InnoSetup