Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.034 c
14-1121554016
imm
2005-07-17 02:46
2005.08.07
Помогите с докой.


14-1121674710
Juice
2005-07-18 12:18
2005.08.07
Рабочие столы и проводник


4-1118395724
!Trinix
2005-06-10 13:28
2005.08.07
Форма


14-1121515639
default
2005-07-16 16:07
2005.08.07
Работа Л.Заде "Нечеткие множества"


11-1104873011
Boguslaw
2005-01-05 00:10
2005.08.07
KOL and ContextMenu shel extension




   Наверх