Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
Эксперт .NET
4319 / 1980 / 385
Регистрация: 27.03.2010
Сообщений: 5,430
Записей в блоге: 1
1

Перенаправление выполнения с одного потока в другой. Не UI потоки

14.12.2015, 20:35. Просмотров 593. Ответов 7
Метки нет (Все метки)

Всем привет. Знает кто-нибудь, как такое можно осуществить? Признаюсь, не сильно копал в эту сторону, но интересует. Можно посмотреть, конечно, исходники последнего дотнета, как там SynchronizationContext в WPF и Windows Forms реализован, но что-то мне подсказывает, что это немного не то. Я и сам копну в эту сторону, если что дельное найду, то отпишу. А если кто уже знает, как это можно сделать, то хотел бы увидеть/узнать.

Зачем это надо? Напрягает ставить локи где ни попадя, чтобы не было с разных потоков одновременных обращений к общему ресурсу.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.12.2015, 20:35
Ответы с готовыми решениями:

Мьютексы-потоки: Как задать время выполнения потока
Подскажите пожалуйста насчет следующих вопросов, сам не разобрался. 1. Как задать время...

Перенаправление с одного домена на другой
Здравствуйте! Есть продвигаемый сайт с одним доменом www.site.ru, с этим сайтом была проблема,...

Перенаправление с одного адреса на другой .htaccess
Привет, помогите написать правило для .htaccess суть проблемы такая, если из поиска или просто...

Перенаправление в .htaccess с одного домена на другой
Здравствуйте! Есть 2 домена (site.com, site2.com) по которым открывается один сайт из одной...

7
Master of Orion
Эксперт .NET
6066 / 4924 / 903
Регистрация: 10.07.2011
Сообщений: 14,520
Записей в блоге: 5
14.12.2015, 21:37 2
Casper-SC, насколько я могу судить, винформы запускаются в STAThread, поэтому мы перенаправляем многопоток в основной, чтобы оконная процедура нормально отрабатывала. То есть это костыль для работы конкретно UI, в качестве синхронизации это отстойная идея так выполнять: Slim-мьютексы практически не требуют ресурсов ибо срабатывают на уровне приложения и не производят захвата системного объекта. Перенаправлять вызов в специальный поток намного дольше и имхо менее архитектурно правильно.
1
Эксперт .NET
4319 / 1980 / 385
Регистрация: 27.03.2010
Сообщений: 5,430
Записей в блоге: 1
14.12.2015, 22:47  [ТС] 3
Psilon, я уже тоже вычитал, что неправильно и т.д. Ну значит не буду заморачиваться этой затеей.

Добавлено через 2 минуты
Psilon, только, зачастую, слим классы синхронизации потоков мне не доступны. На работе .NET 3.5 ибо оживили пылившийся древний проект. Но обещают через пару месяцев перевести всё на .NET 4.5.

Добавлено через 2 минуты

Не по теме:

Это так, к слову. Мне в основном-то реально пригождался пока только AutoResetEvent.

0
Master of Orion
Эксперт .NET
6066 / 4924 / 903
Регистрация: 10.07.2011
Сообщений: 14,520
Записей в блоге: 5
15.12.2015, 00:04 4
Casper-SC, слимы это то же самое, но они не захватывают системный объект если не нужно.
Вот отличная статья на тему. Использовать Slim стоит всегда, когда только есть возможность. Это аналогично совету использовать List<T> вместо ArrayList. Для существования последнего нет ни единой причины кроме обратной совместимости. Соответственно пользовать не-slim блокировками стоит только если они недоступны из-за старой версии фреймворка.
0
Эксперт .NET
13614 / 10520 / 2770
Регистрация: 17.09.2011
Сообщений: 17,865
15.12.2015, 00:37 5
Цитата Сообщение от Casper-SC Посмотреть сообщение
как такое можно осуществить?
Механизм однопоточных апартаментов в целом реализуется примерно так: где-то запущен отдельный "рабочий" поток, который бесконечно мониторит очередь делегатов и выполняет их по мере получения, а через метод Invoke (например) в эту очередь добавляются делегаты с заданиями.
Приоритеты выполнения прикручиваются по желанию.
Примерно так и реализован STAThread в шарпе.

Цитата Сообщение от Psilon Посмотреть сообщение
винформы запускаются в STAThread, поэтому мы перенаправляем многопоток в основной, чтобы оконная процедура нормально отрабатывала. То есть это костыль для работы конкретно UI
Это вы механизм поточных апартаментов костылем обложили или перенаправление в гуишный поток?
0
Master of Orion
Эксперт .NET
6066 / 4924 / 903
Регистрация: 10.07.2011
Сообщений: 14,520
Записей в блоге: 5
15.12.2015, 01:05 6
Цитата Сообщение от kolorotur Посмотреть сообщение
Это вы механизм поточных апартаментов костылем обложили или перенаправление в гуишный поток?
Ну использования апартаментов я в других случаях я не видел, так что затрудняюсь сказать.
Есть по крайнее мере одно поле, посреди которого пасется по крайней мере одна овца, у которой по крайней мере одна сторона черная ©
0
Эксперт .NET
13614 / 10520 / 2770
Регистрация: 17.09.2011
Сообщений: 17,865
15.12.2015, 01:17 7
Цитата Сообщение от Psilon Посмотреть сообщение
Ну использования апартаментов я в других случаях я не видел
Так COM же. Собственно, у этой идеи оттуда ноги и растут.
Это скорее компромисс, а не костыль
0
Master of Orion
Эксперт .NET
6066 / 4924 / 903
Регистрация: 10.07.2011
Сообщений: 14,520
Записей в блоге: 5
15.12.2015, 01:53 8
kolorotur, не так много с COM работал, .Net-оберткок вроде System.Managment обычно хватает.

Цитата Сообщение от kolorotur Посмотреть сообщение
Это скорее компромисс, а не костыль
Ну, не буду возражать против альтернативного именования
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.12.2015, 01:53

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Перенаправление с одного сайта на другой на шлюзе
Пример. Закончился инет, при наборе любого адреса в браузере, открывается сайт провайдера. Как это...

Потоки. Как из одного потока вызвать выполнение метода в другом потоке
Необходимо 50 раз в секунду выполнять методы в двух параллельно работающих потоках...

Перенаправление всего что можно с одного адреса на другой
Ситуация: имеется virtual box, с установленной кастомизированным red hat. В virtual box настроены...

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

Извлечение информации из одного потока в другой
Доброго времени суток, друзья! По заданию нужно создать 2 потока, в одном из которых будет ...

SIGNAL - SLOT из одного потока в другой
Как из gui-потока вызвать слот нового потока, в контексте нового потока? Допустим при нажатии...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.