![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 10.02.2014
Сообщений: 526
|
![]()
Здравствуйте!
Пытаюсь сделать в Дельфи (D7) программу, которая в потоке будет менять цвет объекта из АвтоКАДа (мигать). Проблема возникла вот какая: почему-то функция смены цвета работает в Create потока, а в Execute любое обращение к АвтоКАДу вызывает проблемы (всё зависает разными способами). Перепробовал несколько разных вариантов, остановился на этой реализации: Код:
|
![]() |
![]() |
![]() |
#2 | ||||
Старожил
Регистрация: 20.04.2008
Сообщений: 5,542
|
![]()
1. Execute и Create работают с РАЗНЫМИ объектами Acad-a.
Create устанавливает свое Код:
Цитата:
Цитата:
форма это VCL объект. и ничего не известно про Цитата:
А это совсем ДРУГАЯ переменная(и объект) нежели поле потока Цитата:
программа — запись алгоритма на языке понятном транслятору
|
||||
![]() |
![]() |
![]() |
#3 | ||
Форумчанин
Регистрация: 10.02.2014
Сообщений: 526
|
![]() Цитата:
Цитата:
Код:
AcadApp формы работает без перебоев, определяется так же, как и в потоке, но при нажатии отдельной кнопки. |
||
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 10.02.2014
Сообщений: 526
|
![]()
Что-то никто как-то ничего... Ну я пока покопался немного и всё-таки добился мигания. Сейчас у меня это выглядит так:
Код:
|
![]() |
![]() |
![]() |
#5 | ||
Старожил
Регистрация: 20.04.2008
Сообщений: 5,542
|
![]() Цитата:
synchronize это приостановка потока И ПЕРЕХОД в основной. вот и получается Цитата:
Я же делаю Sleep. Sleep поскольку он внутри colorized и значит внутри synchronize ТОЖЕ относится к основному потоку. как минимум надо Код:
программа — запись алгоритма на языке понятном транслятору
Последний раз редактировалось evg_m; 11.07.2017 в 12:27. |
||
![]() |
![]() |
![]() |
#6 |
Форумчанин
Регистрация: 10.02.2014
Сообщений: 526
|
![]()
Получилось вот так:
Код:
И ещё вот такой вопрос: если synchronize использует основной поток, то чьими переменными он пользуется? У меня AcadApp есть и в основном потоке, и в этом. SetEntColor чей AcadApp использует? В предыдущем варианте, когда всё было внутри synchronize, программа не зависала, но и смены цвета не происходило. |
![]() |
![]() |
![]() |
#7 | |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,542
|
![]() Цитата:
правило разрешения имен. Какая "переменная" c таким именем будет использована. 1. локальные имена (в т.ч. параметры процедур). Код:
Код:
Код:
в некоторых случаях при наличии одинаковых имен это приводит к проблемам. все нарушения(коррекции) порядка использования лечатся использованием составных имен 1. добавлением имени модуля Код:
Код:
программа — запись алгоритма на языке понятном транслятору
|
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Потоки. Как избежать конфликта при обращении к одному элементу? | Ship_1 | Общие вопросы Delphi | 2 | 26.04.2017 13:12 |
WinInet в потоке - проблема при компиляции | Ship_1 | Общие вопросы Delphi | 10 | 21.04.2017 16:47 |
Проблема при обращении эксель к ворду. | RGZZ | Microsoft Office Excel | 0 | 16.06.2010 17:17 |
Thread. проблемы с работой потока. Моментально исчезают созданные в потоке формы. | Casper-SC | Общие вопросы .NET | 3 | 24.04.2010 12:28 |
Связанные таблицы - проблема при обращении к полю БД | nataly_ukr | БД в Delphi | 7 | 13.11.2007 10:47 |