![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Подскажите, как справится с
Аль © (2001-12-25 12:49:00)Я создаю поток (Thread), а потом могу лилбо остановить его , либо запустить, а вот уничтожить по окончании программы (из главного потока) Фредди.Free; - ни как не получается. Всё виснет. В чем тут проблема? //Фред у меня обновляет данные в гриде. И при его запуске начинает моргать Грид ...и мышка, если находиться над Гридом. Как этого избежать?
Юрий Зотов (2001-12-25 14:25:00) [1]while ... do
begin
Synchronize(...)
end;
Если в методе Execute больше ничего не делается, то никакого смысла в таком потоке нет.
Digitman (2001-12-25 14:10:00) [2]а что, нельзя было где-нибудь в форме разместить таймер и в его обработчике написать RefreshM ? к чему поток-то вообще ?
и, уж коль ты его сляпал, не подумав, нужно было, по кр. мере, сделать так :
while not Terminated do
Synchronize(RefreshM);
?????
Виктор Щербаков (2001-12-25 13:39:00) [3]Ну и запускай...
Аль (2001-12-25 13:37:00) [4]А зацыклил я Фред -опять же, как было в примере показано чьем-то -
while true do begin
Synchronize(RefreshM);
end;
FreeOnTreminate ставить побоялся. Не знаю как он работает. Вдруг погибнет после первой остановки. А я хотел бы его запускать по мере надобности много раз.
Юрий Зотов (2001-12-25 13:19:00) [5]Сразу после создания присвойте ему FreeOnTerminate = True и больше ничего не потребуется - при любом способе завершения он убъет сам себя.
Виктор Щербаков (2001-12-25 13:07:00) [6]Поток должен сам заботиться о своем завершении. Т.е. в коде потока должна быть проверка свойства Terminated и выход из метода Execute, если Terminated = true. В коде основного потока нужно установить Terminated в true, подождать завершения потока (метод WaitFor) и, затем, вызвать его метод Free если свойство FreeOnTerminate было установлено в false.
Digitman (2001-12-25 13:02:00) [7]приведи реализацию Фреди.Execute