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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Модель передачи параметров потоку 
V
    Опции темы
GePo
Дата 24.8.2006, 23:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 30.3.2003
Где: Москва

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



У меня есть примерно такой класс( в обобщении  smile ):
Код

class foo
{
    private int a;
    private int b;
    private int c;
    private int Special;

   public void MainLoop()
  {
    .....
    Thread Child = new Thread(new ThreadStart( WorkThread ) );
    .....
  }

  private WorkThread()
  {

  }
}

теперь попытаюсь объянисть проблему. В классе есть множество полей и MainLoop может создавать много потоков. Каждый из них должен работать с одним и тем же набором полей, кроме одного ( int Special). Потоку нельзя назначать процедуру с параметром и в этом загвоздка.
Как сделать так, чтобы не было излишнего копирования данных( т.е. для каждого потока копировался только нужний Special )? (так, чтобы это было удобно в работе)

Что попытался сделать я:
Создал класс B, в котором была ссылка на A( без поля Special) и свой Special. Отлично, при создании потока создаю такой класс и делегат находится в классе B. Все бы хорошо, но неудобно работать с полями класса A. Каждый раз, нужно писать A.c, и т.д.


--------------------
PM MAIL WWW   Вверх
mr.DUDA
Дата 24.8.2006, 23:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


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

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



Почему бы не использовать делегат ParametrizedThreadStart, принимающий аргумент типа object ? Так можно передать потоку что угодно.


--------------------
user posted image
PM MAIL WWW   Вверх
GePo
Дата 24.8.2006, 23:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 30.3.2003
Где: Москва

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



черт=) опять в мануале как следует не покапался. Спасибо
--------------------
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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