powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / рисуем на канве во втором потоке
6 сообщений из 6, страница 1 из 1
рисуем на канве во втором потоке
    #32260957
StarWind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нород, тут общение на тему потоков у меня навеяло один вопросик.
Известно что в дельфи для работы с окном из вторичных потоков предлагается использовать метод synchronyze (могу ошибится в написании).
Причины вполне понятны, с окном надо работать в один поток. Возникает вопрос, может быть для этого разруливать критической секцией? Ведь она обеспечивает именно исполнение участка кода одним потоком.

У кого какие мнения на этот счет?

P.S. Написал и сообразил один недостаток, если под критической секцией вывести мессагу юзеру, то все потоки будут на ней (секции) вставать, пока юзер не отреагирует...
...
Рейтинг: 0 / 0
рисуем на канве во втором потоке
    #32260995
Speaker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Предлагаю рассмотреть такой пример:

Есть функция RefreshOne.
Есть функция RefreshAll.
RefreshAll делает какие-то свои действия,
потом вызывает RefreshOne,
потом завершает делать свои действия.

В потоке периодически, в зависимости от внешних факторов
(скажем, по таймеру,) вызываются то одна, то другая функция.
Пользователь также может вызвать через меню и ту и другую функцию.

Как разграничить доступ с помощью критической секции не используя Synchronize?
...
Рейтинг: 0 / 0
рисуем на канве во втором потоке
    #32261021
Gold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для холста уже есть встроенные методы Lock и UnLock - почитайте о них.
...
Рейтинг: 0 / 0
рисуем на канве во втором потоке
    #32261061
Speaker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понятно, что с Lock / Unlock проблем нет - они позволяют
делать вложенные вызовы, а критические секции нет.
...
Рейтинг: 0 / 0
рисуем на канве во втором потоке
    #32261758
StarWind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Speaker
стесняюсь спросить, а на базе чего сделаны эти методы? Честно говоря сейчас специально заглянул в исходник и там именно критические секции.
По поводу твоих функций, кто тебе мешает объявить в них критическую секцию и радоваться жизни? Единственное работа с пользователем... нажатие на мышку честно говоря не совсем понятно в какой момент блокировать канву для главного потока?
Причем не важно методом Lock или EnterCriticalSection...
у кого-нить есть мысли?
...
Рейтинг: 0 / 0
рисуем на канве во втором потоке
    #32261984
Speaker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Похоже, я немного заблуждался насчет критических секций,
в заблуждение ввело вот это место:

Автор статьи писал: procedure LeaveCriticalSection( var lpCriticalSection: TRTLCriticalSection ); stdcall;
Эта функция освобождает объект независимо от количества предыдущих вызовов потоком функции EnterCriticalSection . Если имеются другие потоки, ожидающие освобождения секции, один из них становится ее владельцем и продолжает исполнение.

Исходя из этого я сделал вывод о невозможности сделать вложенные вызовы,
которые необходимы в данном случае. Сейчас посмотрел еще MSDN и SDK Help,
ничего про это не сказано.

Правда, на мой взгляд, в данном случае это все равно сложнее, чем поставить Synchronize,
что, в общем-то, и было сделано.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / рисуем на канве во втором потоке
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]