Re[19]: Многопоточность
От: Lloyd Россия  
Дата: 14.09.06 14:37
Оценка: -2 :)
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Тем не менее можно все-таки объяснить на примере каким образом замыкания бывают "только для чтения"? Если мне не изменяет память переменные используемые одноврменно в контексте родительского метода и анонимного при компиляции превращаются в поля класса, соответственно, менять их пределах области видимости класса можно откуда угодно.


Да лажанулся чувак. Толко признаваться в этом очень не хочется, модератор все-таки.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Многопоточность
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 05.09.06 16:31
Оценка: 4 (1)
Здравствуйте, <Аноним>, Вы писали:

Еще один вариант — использовать замыкание:

Thread th = new Thread(delegate {ThreadProc(myParam);});

...

void ThreadProc(MyParam myParam) {...}
... << RSDN@Home 1.2.0 alpha rev. 637>>
AVK Blog
Re[3]: Многопоточность
От: desco США http://v2matveev.blogspot.com
Дата: 14.09.06 06:32
Оценка: 2 (1)
Здравствуйте, UFB, Вы писали:

UFB>Здравствуйте, AndrewVK, Вы писали:


AVK>>Здравствуйте, <Аноним>, Вы писали:


AVK>>Еще один вариант — использовать замыкание:


AVK>>
AVK>>Thread th = new Thread(delegate() {ThreadProc(myParam);});

AVK>>...

AVK>>void ThreadProc(MyParam myParam) {...}
AVK>>


UFB>А работающий пример какой будет, а то выдает
Re[7]: Многопоточность
От: pt4h Беларусь http://dzmitryhuba.blogspot.com/
Дата: 14.09.06 14:37
Оценка: 1 (1)
Здравствуйте, ie, Вы писали:

ie>Здравствуйте, AndrewVK, Вы писали:


ie>>>А причем тут собственно строки?

AVK>>А при чем тут собственно то, что в C# замыкания read-only? Вопрос был про передачу параметров в поток, а не про возврат оттуда.

ie>Дык, я оттуда ничего вернуть и не пытаюсь. Разве не так?


AVK>>При необходимости всегда можно передать mutable объект (C# ведь не функциональный язык, в нем это вполне естественно) и менять его, не меняя ссылки. Но к исходному вопросу это никакого отношения не имеет.


ie>Мы уже с Lloyd выяснили, что я не правильно понимал замыкания. Я полагал, что используется значение которое было в момент создания делегата, а не в момент его вызова. Оказалось ровно наоборот.


Выше сказанное абсолютно правильно. Маленькое дополнение — цитата из Ecma-334:

14.5.15.2 Anonymous method blocks
...
The block has access to the outer variables (§14.5.15.3) of the anonymous method. Access of an outer
variable will reference the instance of the variable that is active at the time the anonymous-methodexpression
is evaluated
(§14.5.15.4).

... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Многопоточность
От: Lloyd Россия  
Дата: 05.09.06 09:30
Оценка: +1
Здравствуйте, <Аноним>, Вы писали:

А>При запуске нового потока в С++ ему передается в качестве аргумента указатель (void*), в который размещаются все необходимые данные.

А>При запуске нового потока в C# используется делегат ThreadStart(), который аргументов не принимает. Передать данные я смог только через статические поля класса, метод которого использовался для запуска потока.

А>Есть ли возможность запустить новый поток в C#, передав ему в каческве аргумента object?

А>Если есть, то как?

Thread Constructor (ParameterizedThreadStart)
Thread.Start Method (Object)

... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: Многопоточность
От: ie Россия http://ziez.blogspot.com/
Дата: 14.09.06 08:58
Оценка: -1
Здравствуйте, AndrewVK, Вы писали:

AVK>Еще один вариант — использовать замыкание:

AVK>
AVK>Thread th = new Thread(delegate {ThreadProc(myParam);});
AVK>...
AVK>void ThreadProc(MyParam myParam) {...}
AVK>


Это все конечно круто, но вот только работать не будет. т.к. замыканий в C# пока нет
        string str = "This is a test!";
        ThreadStart ts = new ThreadStart(delegate() { Method(str); });
        Thread t = new Thread(ts);
        str = "This is a second test!";
        t.Start();
        t.Join();
        
    static void Method(string str)
    {
        Console.WriteLine(str);
    }
... << RSDN@Home 1.2.0 alpha rev. 0>>
Превратим окружающую нас среду в воскресенье.
Re[3]: Многопоточность
От: Lloyd Россия  
Дата: 14.09.06 09:08
Оценка: +1
Здравствуйте, ie, Вы писали:

ie>Это все конечно круто, но вот только работать не будет. т.к. замыканий в C# пока нет

ie>
ie>        string str = "This is a test!";
ie>        ThreadStart ts = new ThreadStart(delegate() { Method(str); });
ie>        Thread t = new Thread(ts);
ie>        str = "This is a second test!";
ie>        t.Start();
ie>        t.Join();
        
ie>    static void Method(string str)
ie>    {
ie>        Console.WriteLine(str);
ie>    }
ie>


Вау, это новое слово в аргументировании — приводит пример замыкания для доказательсятва отсутствия оных.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: Многопоточность
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 14.09.06 09:09
Оценка: -1
Здравствуйте, ie, Вы писали:

ie>Это все конечно круто, но вот только работать не будет. т.к. замыканий в C# пока нет


Если ты не знаешь особенностей строк в дотнете, то это не значит что там замыканий нет.
... << RSDN@Home 1.2.0 alpha rev. 642>>
AVK Blog
Re[15]: Многопоточность
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 14.09.06 13:50
Оценка: -1
Здравствуйте, Lloyd, Вы писали:

L>А как ты вот это
Автор: Lloyd
Дата: 14.09.06
объяснишь?


Открой этот код рефлектором, если тебе интересно. Там все очень хорошо видно.
... << RSDN@Home 1.2.0 alpha rev. 642>>
AVK Blog
Re[16]: Многопоточность
От: Lloyd Россия  
Дата: 14.09.06 13:54
Оценка: -1
Здравствуйте, AndrewVK, Вы писали:

L>>А как ты вот это
Автор: Lloyd
Дата: 14.09.06
объяснишь?


AVK>Открой этот код рефлектором, если тебе интересно. Там все очень хорошо видно.


Да я прекрасно знаю как работают замыкания. А вот судя по твоим высказываниям, у тебя в этой области есть определенные пробелы.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[17]: Многопоточность
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 14.09.06 14:11
Оценка: -1
Здравствуйте, Lloyd, Вы писали:

L>Да я прекрасно знаю как работают замыкания. А вот судя по твоим высказываниям, у тебя в этой области есть определенные пробелы.


Понятно, заняться не чем. В следующий раз разводить в форуме черти что не нужно, достаточно написать свое фе мне лично на сыло.
... << RSDN@Home 1.2.0 alpha rev. 642>>
AVK Blog
Re: Многопоточность
От: Аноним  
Дата: 14.09.06 14:55
Оценка: :)
Здравствуйте, Аноним, Вы писали:

А>При запуске нового потока в С++ ему передается в качестве аргумента указатель (void*), в который размещаются все необходимые данные.

А>При запуске нового потока в C# используется делегат ThreadStart(), который аргументов не принимает. Передать данные я смог только через статические поля класса, метод которого использовался для запуска потока.

А>Есть ли возможность запустить новый поток в C#, передав ему в каческве аргумента object?

А>Если есть, то как?

Люди, а что велик-то изобретаем?! Для этого в каждом потоке есть слоты данных.
А именно:

Thread.AllocateDataSlot (...)
Thread.AllocateNamedDataSlot (...)

Алгоритм такой:

1. создал поток (он ещё не запущен)
2. создал слот
3. записал в слот
4. запустил поток
5. получил данные из запущенного потока Thread.CurrentThread.GetData (...)
6. убил слот
Многопоточность
От: Аноним  
Дата: 05.09.06 09:22
Оценка:
При запуске нового потока в С++ ему передается в качестве аргумента указатель (void*), в который размещаются все необходимые данные.
При запуске нового потока в C# используется делегат ThreadStart(), который аргументов не принимает. Передать данные я смог только через статические поля класса, метод которого использовался для запуска потока.

Есть ли возможность запустить новый поток в C#, передав ему в каческве аргумента object?
Если есть, то как?
Re: Многопоточность
От: hugo Австрия  
Дата: 05.09.06 09:31
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Есть ли возможность запустить новый поток в C#, передав ему в каческве аргумента object?

А>Если есть, то как?

public void Start (object parameter)


О так?
Многопоточность
От: Аноним  
Дата: 05.09.06 09:39
Оценка:
    public class Main
    {
        public Main()
        {
            CustomThread customThread = new CustomThread(new string[]{"1", "2", "3"}); 
            Thread thread = new Thread(new ThreadStart(customThread.Start));  
        }

        public void ThreadWorker()
        {
        }
    }

    public class CustomThread
    {
        private object _data;

        public object Data
        {
            get
            {
                return _data;
            }
        }

        public CustomThread(object data)
        {
            this._data = data;
        }

        public void Start()
        {
            // do smth with _data
        }
    }





данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re[2]: Многопоточность
От: UFB  
Дата: 14.09.06 06:21
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, <Аноним>, Вы писали:


AVK>Еще один вариант — использовать замыкание:


AVK>
AVK>Thread th = new Thread(delegate {ThreadProc(myParam);});

AVK>...

AVK>void ThreadProc(MyParam myParam) {...}
AVK>


А работающий пример какой будет, а то выдает

Error    5    The call is ambiguous between the following methods or properties: 'System.Threading.Thread.Thread(System.Threading.ThreadStart)' and 'System.Threading.Thread.Thread(System.Threading.ParameterizedThreadStart)'
Re[4]: Многопоточность
От: ie Россия http://ziez.blogspot.com/
Дата: 14.09.06 09:12
Оценка:
Здравствуйте, Lloyd, Вы писали:

ie>>Это все конечно круто, но вот только работать не будет. т.к. замыканий в C# пока нет

ie>>
ie>>        string str = "This is a test!";
ie>>        ThreadStart ts = new ThreadStart(delegate() { Method(str); });
ie>>        Thread t = new Thread(ts);
ie>>        str = "This is a second test!";
ie>>        t.Start();
ie>>        t.Join();
        
ie>>    static void Method(string str)
ie>>    {
ie>>        Console.WriteLine(str);
ie>>    }
ie>>


L>Вау, это новое слово в аргументировании — приводит пример замыкания для доказательсятва отсутствия оных.


Вот когда этот пример выведет в консоль "This is a test!", тогда это будут замыкания, а пока выводит "This is a second test!", это пример отсутсвия оных
... << RSDN@Home 1.2.0 alpha rev. 0>>
Превратим окружающую нас среду в воскресенье.
Re[4]: Многопоточность
От: Lloyd Россия  
Дата: 14.09.06 09:13
Оценка:
Здравствуйте, AndrewVK, Вы писали:

ie>>Это все конечно круто, но вот только работать не будет. т.к. замыканий в C# пока нет


AVK>Если ты не знаешь особенностей строк в дотнете, то это не значит что там замыканий нет.


А какая такая особенность строк здесь используется?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: Многопоточность
От: ie Россия http://ziez.blogspot.com/
Дата: 14.09.06 09:14
Оценка:
Здравствуйте, AndrewVK, Вы писали:

ie>>Это все конечно круто, но вот только работать не будет. т.к. замыканий в C# пока нет

AVK>Если ты не знаешь особенностей строк в дотнете, то это не значит что там замыканий нет.

А причем тут собственно строки? Я могу вместо строки взять любой другой объект, результат от этого не изменется.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Превратим окружающую нас среду в воскресенье.
Re[5]: Многопоточность
От: Lloyd Россия  
Дата: 14.09.06 09:15
Оценка:
Здравствуйте, ie, Вы писали:

L>>Вау, это новое слово в аргументировании — приводит пример замыкания для доказательсятва отсутствия оных.


ie>Вот когда этот пример выведет в консоль "This is a test!", тогда это будут замыкания, а пока выводит "This is a second test!", это пример отсутсвия оных


Нет, это не отсутствие оных, а непонимание того, что такое замыкание. Замыкание захватывает переменную, а не её значение.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[6]: Многопоточность
От: ie Россия http://ziez.blogspot.com/
Дата: 14.09.06 09:35
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>>>Вау, это новое слово в аргументировании — приводит пример замыкания для доказательсятва отсутствия оных.

ie>>Вот когда этот пример выведет в консоль "This is a test!", тогда это будут замыкания, а пока выводит "This is a second test!", это пример отсутсвия оных
L>Нет, это не отсутствие оных, а непонимание того, что такое замыкание. Замыкание захватывает переменную, а не её значение.

Усё! Непонимание устранили
... << RSDN@Home 1.2.0 alpha rev. 0>>
Превратим окружающую нас среду в воскресенье.
Re[5]: Многопоточность
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 14.09.06 09:40
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>А какая такая особенность строк здесь используется?


Здесь immutability
... << RSDN@Home 1.2.0 alpha rev. 642>>
AVK Blog
Re[5]: Многопоточность
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 14.09.06 09:40
Оценка:
Здравствуйте, ie, Вы писали:

ie>А причем тут собственно строки?


А при чем тут собственно то, что в C# замыкания read-only? Вопрос был про передачу параметров в поток, а не про возврат оттуда.
При необходимости всегда можно передать mutable объект (C# ведь не функциональный язык, в нем это вполне естественно) и менять его, не меняя ссылки. Но к исходному вопросу это никакого отношения не имеет.
... << RSDN@Home 1.2.0 alpha rev. 642>>
AVK Blog
Re[6]: Многопоточность
От: Lloyd Россия  
Дата: 14.09.06 09:56
Оценка:
Здравствуйте, AndrewVK, Вы писали:

L>>А какая такая особенность строк здесь используется?


AVK>Здесь immutability


И как она здесь используется? Переделай на любой другой класс, результат будет тот же.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[6]: Многопоточность
От: Lloyd Россия  
Дата: 14.09.06 09:56
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>А при чем тут собственно то, что в C# замыкания read-only?




static void Main(string[] args)
{
    string str = "This is a test!";
    ThreadStart ts = new ThreadStart(delegate() { Method(str); str = "Учите матчасть, AndrewVK ;)"; });
    Thread t = new Thread(ts);
    str = "This is a second test!";
    t.Start();
    t.Join();
    Console.WriteLine(str);

    Console.ReadLine();
}

private static void Method(string str)
{
    Console.WriteLine(str);
}
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[6]: Многопоточность
От: ie Россия http://ziez.blogspot.com/
Дата: 14.09.06 10:03
Оценка:
Здравствуйте, AndrewVK, Вы писали:

ie>>А причем тут собственно строки?

AVK>А при чем тут собственно то, что в C# замыкания read-only? Вопрос был про передачу параметров в поток, а не про возврат оттуда.

Дык, я оттуда ничего вернуть и не пытаюсь. Разве не так?

AVK>При необходимости всегда можно передать mutable объект (C# ведь не функциональный язык, в нем это вполне естественно) и менять его, не меняя ссылки. Но к исходному вопросу это никакого отношения не имеет.


Мы уже с Lloyd выяснили, что я не правильно понимал замыкания. Я полагал, что используется значение которое было в момент создания делегата, а не в момент его вызова. Оказалось ровно наоборот.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Превратим окружающую нас среду в воскресенье.
Re[7]: Многопоточность
От: ie Россия http://ziez.blogspot.com/
Дата: 14.09.06 10:11
Оценка:
Здравствуйте, Lloyd, Вы писали:

AVK>>А при чем тут собственно то, что в C# замыкания read-only?

L>
L>
L>    ThreadStart ts = new ThreadStart(delegate() { Method(str); str = "Учите матчасть, AndrewVK ;)"; });
L>


О! Все понял! Надо ж было так тупить. Пойти чтоль чайку попить на радостях.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Превратим окружающую нас среду в воскресенье.
Re[7]: Многопоточность
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 14.09.06 10:22
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>И как она здесь используется? Переделай на любой другой класс, результат будет тот же.


    StringBuilder str = new StringBuilder("This is a test!");
    ThreadStart ts = new ThreadStart(delegate() { Method(str); });
    Thread t = new Thread(ts);
    str.Length = 0; str.Append("This is a second test!");
    t.Start();
    t.Join();
... << RSDN@Home 1.2.0 alpha rev. 642>>
AVK Blog
Re[7]: Многопоточность
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 14.09.06 10:22
Оценка:
Здравствуйте, Lloyd, Вы писали:

AVK>>А при чем тут собственно то, что в C# замыкания read-only?


L>


Хочешь поспорить о терминах? Имелось ввиду, что изменение замыканий во внешнем контексте после его образования не распространяется на внутренний, что, собственно, приведенный пример и демонстрировал.
... << RSDN@Home 1.2.0 alpha rev. 642>>
AVK Blog
Re[8]: Многопоточность
От: Lloyd Россия  
Дата: 14.09.06 10:31
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>
AVK>    StringBuilder str = new StringBuilder("This is a test!");
AVK>    ThreadStart ts = new ThreadStart(delegate() { Method(str); });
AVK>    Thread t = new Thread(ts);
AVK>    str.Length = 0; str.Append("This is a second test!");
AVK>    t.Start();
AVK>    t.Join();
AVK>


Не, такие лоховские подтасовки не катят. Пиши тогда уж:
str = new StringBuilder("This is a second test!");
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[8]: Многопоточность
От: Lloyd Россия  
Дата: 14.09.06 10:31
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, Lloyd, Вы писали:


AVK>>>А при чем тут собственно то, что в C# замыкания read-only?


L>>


AVK>Хочешь поспорить о терминах? Имелось ввиду, что изменение замыканий во внешнем контексте после его образования не распространяется на внутренний, что, собственно, приведенный пример и демонстрировал.


А можно то же самое, но на русском языке. Что значит "изменение замыканий"? Для меня замыкание — это совокупность "захваченных" переменных. Как он может измениться?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[9]: Многопоточность
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 14.09.06 11:55
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Не, такие лоховские подтасовки не катят. Пиши тогда уж:


Что то у тебя с терминологией не то. Подтасовок тут никаких нет, всего лишь демонстрация того, как нужно действовать, когда таки хочется получить требуемое. Только, конечно, лучше не StringBuilder использовать, а специальный mutable класс. А еще лучше вобще такое не использовать, ибо чревато.
... << RSDN@Home 1.2.0 alpha rev. 642>>
AVK Blog
Re[9]: Многопоточность
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 14.09.06 11:55
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>А можно то же самое, но на русском языке. Что значит "изменение замыканий"? Для меня замыкание — это совокупность "захваченных" переменных. Как он может измениться?


Я лучше на английском процитирую:

any changes to such variables from within the body of anonymous method are not visible after it returns. This is because anonymous methods are in fact implemented in a way very similar to anonymous inner classes in Java, and do not have direct access to variables from the enclosing scope; rather, the method makes a copy of all local variables it uses.

... << RSDN@Home 1.2.0 alpha rev. 642>>
AVK Blog
Re[10]: Многопоточность
От: Lloyd Россия  
Дата: 14.09.06 12:51
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, Lloyd, Вы писали:


L>>Не, такие лоховские подтасовки не катят. Пиши тогда уж:


AVK>Что то у тебя с терминологией не то. Подтасовок тут никаких нет, всего лишь демонстрация того, как нужно действовать, когда таки хочется получить требуемое.


Только вот требуемого поведения таким способом не получить. Смотри первоначальный пост.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[10]: Многопоточность
От: Lloyd Россия  
Дата: 14.09.06 12:51
Оценка:
Здравствуйте, AndrewVK, Вы писали:

L>>А можно то же самое, но на русском языке. Что значит "изменение замыканий"? Для меня замыкание — это совокупность "захваченных" переменных. Как он может измениться?


AVK>Я лучше на английском процитирую:

AVK>

any changes to such variables from within the body of anonymous method are not visible after it returns. This is because anonymous methods are in fact implemented in a way very similar to anonymous inner classes in Java, and do not have direct access to variables from the enclosing scope; rather, the method makes a copy of all local variables it uses.


Ну, во-первых, тебе привели пример того, что изменения захваченные переменных все-таки видны после возврата из метода. А во-вторых, причем здесь джава?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[11]: Многопоточность
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 14.09.06 13:07
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Ну, во-первых, тебе привели пример того, что изменения захваченные переменных все-таки видны после возврата из метода.


Мне не надо.

L> А во-вторых, причем здесь джава?


При том, что текст, оказавшийся под рукой, был заодно и про Java.
... << RSDN@Home 1.2.0 alpha rev. 642>>
AVK Blog
Re[12]: Многопоточность
От: Lloyd Россия  
Дата: 14.09.06 13:11
Оценка:
Здравствуйте, AndrewVK, Вы писали:

L>>Ну, во-первых, тебе привели пример того, что изменения захваченные переменных все-таки видны после возврата из метода.


AVK>Мне не надо.


Чего не надо? Твои слова опровергаются простейшим тестом.

L>> А во-вторых, причем здесь джава?


AVK>При том, что текст, оказавшийся под рукой, был заодно и про Java.


Но, как минимум, по отношению к .net-у он не верен.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[13]: Многопоточность
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 14.09.06 13:29
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Чего не надо? Твои слова опровергаются простейшим тестом.


Это спор о терминах.

AVK>>При том, что текст, оказавшийся под рукой, был заодно и про Java.


L>Но, как минимум, по отношению к .net-у он не верен.


Конкретно в цитате про C#.
... << RSDN@Home 1.2.0 alpha rev. 642>>
AVK Blog
Re[14]: Многопоточность
От: Lloyd Россия  
Дата: 14.09.06 13:38
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, Lloyd, Вы писали:


L>>Чего не надо? Твои слова опровергаются простейшим тестом.


AVK>Это спор о терминах.


Хорошо, напиши по-русски как ты понял приведенную цитату. Вот мой перевод:

любые именения этих переменных, сделанные внутри тела анонимного метода не видны после возврата из анонимного метода. Так происходит потому что анонимные методы в действительности реализованы способом, очень схожим с тем как реализованы inner-классы в джаве. и (анонимные методы) не имеют прямого доступа к переменным из внешней области видимости; метод создает копию всех локальных переменных, которые он ипользует.


Если я не наврал в переводе, то то что там написано не соответствует действительности.

AVK>>>При том, что текст, оказавшийся под рукой, был заодно и про Java.


L>>Но, как минимум, по отношению к .net-у он не верен.


AVK>Конкретно в цитате про C#.


А как ты вот это
Автор: Lloyd
Дата: 14.09.06
объяснишь?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[18]: Многопоточность
От: Lloyd Россия  
Дата: 14.09.06 14:14
Оценка:
Здравствуйте, AndrewVK, Вы писали:

L>>Да я прекрасно знаю как работают замыкания. А вот судя по твоим высказываниям, у тебя в этой области есть определенные пробелы.


AVK>Понятно, заняться не чем. В следующий раз разводить в форуме черти что не нужно, достаточно написать свое фе мне лично на сыло.


До этой ветки никакого моего фе по отношению к вам не было. Так что не смог бы воспользоваться вашим советом при всем желании.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[18]: Многопоточность
От: Воронков Василий Россия  
Дата: 14.09.06 14:28
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Понятно, заняться не чем. В следующий раз разводить в форуме черти что не нужно, достаточно написать свое фе мне лично на сыло.


Тем не менее можно все-таки объяснить на примере каким образом замыкания бывают "только для чтения"? Если мне не изменяет память переменные используемые одноврменно в контексте родительского метода и анонимного при компиляции превращаются в поля класса, соответственно, менять их пределах области видимости класса можно откуда угодно.
Re[2]: Многопоточность
От: Воронков Василий Россия  
Дата: 14.09.06 14:58
Оценка:
Здравствуйте, Аноним, Вы писали:

Да тут все еще проще. На самом деле в дотнете 2.0, на котором изначально приводились примеры кода есть делегат ParameterizedThreadStart, который как и позволяет прекрасно решить обозначенную в первом топике задачу — без всяких там замыканий, слотов и другой медвежути.
Re[3]: Многопоточность
От: Streamer1 Украина  
Дата: 15.09.06 00:42
Оценка:
Здравствуйте, ie, Вы писали:

работает


объясните плиз:
delegate { Method(str); }


что при этом реально происходит?
Тот кто знает не говорит, тот кто говорит не знает.
Re: Многопоточность
От: Streamer1 Украина  
Дата: 15.09.06 00:42
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Есть ли возможность запустить новый поток в C#, передав ему в каческве аргумента object?

А>Если есть, то как?

можно так:
class TEST
{
   static public void Main()
   {
      MyThreadData td = new MyThreadData();
      td.str = "This is a test!";

      Thread t = new Thread(td.threadProc);
      t.Start();
      t.Join();
   }
   class MyThreadData
   {
      public string str;
      public void threadProc()
      {
         Console.WriteLine("{0}", str);
      }
   }
}
Тот кто знает не говорит, тот кто говорит не знает.
Re[4]: Многопоточность
От: ie Россия http://ziez.blogspot.com/
Дата: 15.09.06 06:05
Оценка:
Здравствуйте, Streamer1, Вы писали:

S>объясните плиз:

S>
S>delegate { Method(str); }
S>


S>что при этом реально происходит?


Реально компилятор генерит класс, который инкапсулирует все поля, которые используются в замыкании. Т.е. после компиляции приведенный мной код превратится примерно в следующее:
    private static void Method(string str)
    {
        Console.WriteLine(str);
    }

    private static void Main(string[] args)
    {
        Temp temp = new Temp();
        temp.str = "This is a test!";
        ThreadStart start1 = new ThreadStart(temp.Method);
        Thread thread1 = new Thread(start1);
        temp.str = "This is a second test!";
        thread1.Start();
        thread1.Join();
        Console.ReadLine();
    }
    
    private sealed class Temp
    {
        public string str;
        public void Method()
        {
            Test.Method(str);
        }
    }
... << RSDN@Home 1.2.0 alpha rev. 0>>
Превратим окружающую нас среду в воскресенье.
Re[3]: Многопоточность
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 15.09.06 08:26
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Да тут все еще проще. На самом деле в дотнете 2.0, на котором изначально приводились примеры кода есть делегат ParameterizedThreadStart, который как и позволяет прекрасно решить обозначенную в первом топике задачу — без всяких там замыканий, слотов и другой медвежути.


Замыкание позволяет обойтись без приведений типов.
... << RSDN@Home 1.2.0 alpha rev. 642>>
AVK Blog
Re[5]: Многопоточность
От: Streamer1 Украина  
Дата: 20.09.06 18:38
Оценка:
Здравствуйте, ie, Вы писали:

ie>Реально компилятор генерит класс, который инкапсулирует все поля, которые используются в замыкании. Т.е. после компиляции приведенный мной код превратится примерно в следующее:

ie>
...    
ie>    private sealed class Temp
ie>    {
ie>        public string str;
ie>        public void Method()
ie>        {
ie>            Test.Method(str);
ie>        }
ie>    }
ie>


хм... а я такой класс сам пишу в таких случаях
Тот кто знает не говорит, тот кто говорит не знает.
Re[6]: Многопоточность
От: ie Россия http://ziez.blogspot.com/
Дата: 21.09.06 03:04
Оценка:
Здравствуйте, Streamer1, Вы писали:

S>хм... а я такой класс сам пишу в таких случаях


ну это уже сродни разворачивания foreach в while
... << RSDN@Home 1.2.0 alpha rev. 0>>
Превратим окружающую нас среду в воскресенье.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.