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

Есть ли возможность запустить новый поток в C#, передав ему в каческве аргумента object?
Если есть, то как?
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: Многопоточность
От: 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: Многопоточность
От: 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[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[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[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[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>>
Превратим окружающую нас среду в воскресенье.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.