![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как закрыть программу? [D6, NT4, Win2k, WinXP]
serg128 © (2005-07-21 18:06:00)Т.е. написал процедуру, в которой бесконечный цикл (ну надо так).
Создал TThread, и впихнул его туда. Всё работает хорошо, загрузка проца минимальна, но, при закрытии основного окна, программа не умирает! В обработчике OnClose написано так:
b.Terminate;
b.Resume;
b.Free;
Close;
Action := caFree;
// b- это указатель на TThread
Как закрыть программу?
Fay (2005-07-21 20:03:00) [1]2 Юрий Зотов © (21.07.05 19:52) [15]
Да, с кешированием у него всё в порядке! 8)
Юрий Зотов (2005-07-21 19:52:00) [2]> Fay © (21.07.05 19:48) [14]
Эт-точно. Вполне согласен. Можно передать, что его система кэширования шаблонов вполне успешно живет и работает.
Fay (2005-07-21 19:48:00) [3]2 Юрий Зотов © (21.07.05 19:36) [13]
Денис у нас не очень давно. Ему, похоже, нравится.
Очень ценный кадр!
Юрий Зотов (2005-07-21 19:36:00) [4]> Fay © (21.07.05 19:20) [12]
Опа! Неожиданно.
Привет Денису тоже! Надеюсь, все ОК?
Fay (2005-07-21 19:20:00) [5]2 Юрий Зотов © (21.07.05 19:09) [9]
Привет от Дениса Левшина (Эльбрус)!
Fay (2005-07-21 19:19:00) [6]2 Юрий Зотов © (21.07.05 19:09) [9]
> Такой вызов используется, когда скорость выполнения
> цикла неважна. Он передает остатот кванта времени
> другим потокам и при слишком быстром цикле позволяет
> уменьшить загрузку CPU.
Почему тогда не Sleep(0)?
Fay (2005-07-21 19:18:00) [7]2 Юрий Зотов © (21.07.05 19:09) [9]
Огромное спасибо! Правда, я и так знаю, что такое Sleep.
Меня интересовало другое - зачем он нужен в данном случае?
Я (по наивности, видимо) думал, что код пишется для того, что нужно, а не для того, что не нужно...
Шутки ради сравнил нагрузку - она не изменилась. Просто потому, что я запустил несколько разных "грузилок". 8)
Юрий Зотов (2005-07-21 19:09:00) [8]> Fay © (21.07.05 18:34) [7]
> Зачем Sleep и почему (1)?
Такой вызов используется, когда скорость выполнения цикла неважна. Он передает остатот кванта времени другим потокам и при слишком быстром цикле позволяет уменьшить загрузку CPU.
Напишите такой Execute:
while not Terminated do
Sleep(1)
и сравните загрузку CPU в этом варианте и в варианте с пустым циклом, без Sleep(1).
ki11er (2005-07-21 18:38:00) [9]>Зачем Sleep?
Крутые пацаны пишут трэды без слип, конечно же ;-)
>и почему (1)?
Просто для примера.
Fay (2005-07-21 18:34:00) [10]2 ki11er (21.07.05 18:32) [6]
Зачем Sleep и почему (1)?
Юрий Зотов (2005-07-21 18:32:00) [11]> serg128 (21.07.05 18:26) [3]
Чудес не бывает. Код цикла - в студию, плз.
Вместо b.Free я бы использовал FreeOnTerminate - пусть уничтожает сам себя, он сам разберется.
ki11er (2005-07-21 18:32:00) [12]сам трэд должен выглядеть примерно так:
while not Terminated do begin
...
Sleep(1)
end;
ki11er (2005-07-21 18:28:00) [13]...
b.Terminate;
WaitForSingleObject(b.Handle ... )
...
serg128 (2005-07-21 18:26:00) [14]Проверка на terminated ничего не дала
Юрий Зотов (2005-07-21 18:18:00) [15]В цикле должна быть проверка Terminated, иначе Terminate ничего не даст.
Fay (2005-07-21 18:09:00) [16]2 serg128 (21.07.05 18:06)
Close - это что?