Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Локальные для потока переменные, Локальные для потока переменные 
:(
    Опции темы
Гость_iskan
Дата 12.5.2005, 11:10 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Кто нибудь подскажите пожадуйста как определить локальную для потока переменную
в .NET?
  Вверх
stab
Дата 12.5.2005, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 22
Всего: 48



Любая переменная объявленная в методе потока является локальной для потока.
Добавлено @ 11:35
Как вариант, можно работать с Thread.AllocateDataSlot, Thread.SetData, Thread.GetData, но, IMHO, кроме дополнительных заморочек ни чего нового в код это не принесет.


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
arilou
Дата 12.5.2005, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



Цитата(cully @ 12.5.2005, 11:31)
кроме дополнительных заморочек ни чего нового в код это не принесет.

Еще как принесет - а если у тебя один поток (или несколько) обслуживают разных клиентов, тебе нужно сохранять-загружать локальную информацию.


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
Гость_iskan
Дата 12.5.2005, 13:08 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Уточню,
у меня есть сессия NHibernate я хочу чтобы она открывалась как только понадобиться и закрывалась после обработки запроса.

я хотел бы написать вот такой код в обрабочике EndRequest (или как его там)

if (Utils.CurrentSession != null)
{
Utils.CurrentSession.Close();
Utils.CurrentSession = null;
}

где мне хранить CurrentSession?
если можно приведите реализацию geter'а и setter'а
А то я что-то в MSDN про эти слоты ничего не понял....
  Вверх
arilou
Дата 12.5.2005, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



Ты про прогу свою побольше расскажи - это ASP.NET или Forms приложение?


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
arilou
Дата 12.5.2005, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



Вот код. Он подходит только для Windows.Forms приложений. Если интересно, почему - спрашивай:

Код

/// <summary>
/// Данное свойство позволяет сохранять и получать строковое значение в/из ThreadLocalStorage
/// текущего потока.
/// Результат ее выполнения будет разным при обращении к свойству из разных потоков
/// </summary>
public string ThreadLocalValue
{
    get
    {
        // получаем слот для данных. если его не было, он будет создан 
        // (вроде, иначе надо где-то вызвать Thread.AllocateNamedDataSlot)
        // "value" - это имя слота. Его выбираешь сам
        LocalDataStoreSlot slot = Thread.GetNamedDataSlot("value");
        // получаем значение
        object val = Thread.GetData(slot);

        // возвращаем результат
        if(val == null)
            return string.Empty;
        else
            return (string)val;
    }

    set
    {
        // тоже, что и в getter'е
        LocalDataStoreSlot slot = Thread.GetNamedDataSlot("value");

        // устанавливаем значение
        Thread.SetData(slot, value);
    }
}


Кстати, предлагаю зарегестрироваться и стать полноправным участником нашего форума.


Это сообщение отредактировал(а) arilou - 12.5.2005, 13:51


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
iskan
Дата 12.5.2005, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 16.3.2005

Репутация: нет
Всего: нет



Спасибо большое
PM MAIL   Вверх
stab
Дата 12.5.2005, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 22
Всего: 48



Цитата(arilou @ 12.5.2005, 09:44)
Еще как принесет - а если у тебя один поток (или несколько) обслуживают разных клиентов, тебе нужно сохранять-загружать локальную информацию.


Дык, все объекты созданные в контексте потока, а следовательно и данные в них уникальны для потока. Можно хранить эти объекты в полях, а можно в слотах, разницы НОЛЬ.



--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
arilou
Дата 12.5.2005, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



А если пул потоков?


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
stab
Дата 13.5.2005, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 22
Всего: 48



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


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0482 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.