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

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

Работа с потоками [D6, Win95/98, WinXP]


Страницы:   1 2

Izyum ©   (2004-10-14 16:18:00) 

Возникла задача создать многопоточное приложение...
Вторичный поток должен выполнять определенную работу и отображать результаты индикаторами на главной форме...
Но в момент, когда я беру мышом заголовок главной формы - вторичный поток тоже останавливается...
тот же эффект наблюдается в демке из стандартной поставки...

ВОПРОС: это так и должно быть или есть способ создать вторичный поток, который работает абсолютно независимо от главного?


panov   (2004-10-14 17:32:00) [21]

>Izyum ©   (14.10.04 17:28) [6]

Так не надо на каждый шаг выполнять обновление формы или визуальных объектов VCL.
В конце-концов, если такая необходимость есть, используй синхронизацию методом посылки сообщений из доп. потока в основной и обрабатывай их.
В этом случае доп. поток не будет ожидать обновления.


Izyum   (2004-10-14 17:28:00) [22]

Ага, хоть что-то проясняется...
Тогда может кто-то подскажет как реализовать такую задачу:
во вторичном потоке необходимо ГАРАНТИРОВАНО считывать данные из какого-либо порта (давайте для примера возьмем COM)и по возможности отображать результаты на главной форме. Если, к примеру, пользователь выполняет какие-либо действия над главной формой, которые не дают выполнится Synchronize - пусть интерфейс не обновляется, но данные из порта должны быть вычитаны все равно. реально как-то это реализовать?


Григорьев Антон   (2004-10-14 17:21:00) [23]

В это время не работает Synchronize, т.к. он выполняется в главной нити, а главная нить занята обработкой перемещения формы. Если бы не было Synchronize, нить спокойно продолжала бы свою работу.


Izyum   (2004-10-14 16:30:00) [24]

Значит не полностью понятно объяснил...
Если на главной форме ничего не меняется из-за того, что я держу заголовок мышью - во вторичном потоке inc(i) должно работать?
Если нет - по чему?
Если да - не работает!

Дело в том, что за 10 секунд код inc(i) должен был достаточно много "накрутить". Правильно? Икогда я отпустил заголовок - обновления заголовка должно быб продолжиться с текущего значения i. Правильно? Так вот если при значении 1000 я нажал мыша, подержал 10 секунд и отпустил - в заголовке побежало начиная с 1001... Хотя я ожидал там увидеть, к примеру, 2001...


Суслик   (2004-10-14 16:26:00) [25]


> Во вторичном потоке  делаю тупое наращивание переменной
> и вывожу ее значение в заголовок гланой формы...

Но это не значит, что поток остановился. Дело в том, что vcl принципиально онднозадачаная - только один поток может менять что-то в формах!

Читай и изучай метод tthread.synchronize


Izyum   (2004-10-14 16:22:00) [26]

Во вторичном потоке  делаю тупое наращивание переменной и вывожу ее значение в заголовок гланой формы...
Так вот, когда нажимаю кнопик мыша на заголовке - цифири перестают "бежать". Но если подержать секунд десять (должно уже заметно вперед продвинуться это сложное вычисление) и отпустить, цифири продолжают считать с той, на которой произошло нажатия кнопика...

ЗЫ: надеюсь понятно описал;)


Суслик   (2004-10-14 16:19:00) [27]


> вторичный поток тоже останавливается...

как проверил?


Страницы:   1 2

Наверх

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