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

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

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

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

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

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

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

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

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


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