Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Завершение thread Не происходит [D7]


Fantnk ©   (2009-11-07 21:16:00) 

В программе на Delphi создал Procedure MyThread.Execute, выполняющую несколько циклов и выводит прогрессбар (отдельная форма).
После всего этого поток не закрывается. Terminated = false. Как мне закрыть поток (принудительно или как - не важно). Важно то, чтобы программа корректно закрылась, а не с EOSError (не верный дескриптор окна, #1400).
Помогите, пожалуйста.


Anatoly Podgoretsky   (2009-11-07 21:44:00) [1]

> Fantnk  (07.11.2009 21:16:00)  [0]

А надо Terminated = true


Сергей М.   (2009-11-07 21:41:00) [2]


> Это не допустимо?


Да, это не допустимо.


> нужно, чтобы шлавная форма не подвисала во время выполнения
> программы


Для этого предусмотрен метод TThread.Synchronize - он поставит в хвост очереди осн.потока "команду" на выполнение указанного тобой метода твоего класса TMyThread, в котором можно будет безопасно обращаться к виз. VCL-контролам.


Fantnk   (2009-11-07 21:34:00) [3]

Т.е. я не могу выводить не только прогресс бар, но и, допустим, вносить к-либо значения в edit'ы?
Кусок из процедуры Thread:
 Form1.Memo1.CopyToClipboard;
 sleep(10);
 Form1.Edit1.PasteFromClipboard;

Это не допустимо?
Есть альтернатива потокам? Мне нужно, чтобы шлавная форма не подвисала во время выполнения программы.


Сергей М.   (2009-11-07 21:28:00) [4]


> выводит прогрессбар


Обращения к визуальным VCL-контролам из доп.потоков VCL-приложения недопустимы.


Сергей М.   (2009-11-07 21:27:00) [5]

И что ?
Компилятор не обязан ловить ошибки логики, приводящей к катастрофе алгоритма в ран-тайм


Fantnk   (2009-11-07 21:24:00) [6]


> Исправь ошибку в теле Execute - будет закрываться корректно.

При компиляции никаких ошибок не выдало...


Сергей М.   (2009-11-07 21:21:00) [7]


> Важно то, чтобы программа корректно закрылась


Исправь ошибку в теле Execute - будет закрываться корректно.


Наверх

Титульная страница Поиск, карта сайта Написать письмо