Re[3]: Thread в C#
От: Lloyd Россия  
Дата: 21.05.07 09:46
Оценка: :)))
Здравствуйте, _Morpheus_, Вы писали:

_M_>это проще анонимным делегатом записать:


_M_>
_M_>public void Start() 
_M_>{ 
_M_>  int parameter = 0;
    
_M_>    Thread t = new Thread(new ThreadStart(delegate() { WorkerProcedure(parameter); }  )); 
_M_>    t.Start();
_M_>} 
_M_>


_M_>а вообще во втором фреймворке есть ParametrizedThreadStart, см. тут
Автор: _Morpheus_
Дата: 21.05.07


Год посмотри.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[7]: Thread в C#
От: MaxMP Россия  
Дата: 04.12.02 11:38
Оценка: 6 (1)
Здравствуйте, DarkGray, Вы писали:

TK>>Треды для этого берутся из пула со всеми вытекающими.


DG>Про пул я знаю.


DG>Мне интересны эти самые "вытекающие"...


Вытекающие таковы — для процесса (не AppDomain) выбеляется макс. 25 "тредов". То есть они могут элементарно кончиться.

МС советует использовать для коротких вещей.
Re: Thread в C#
От: TK Лес кывт.рф
Дата: 04.12.02 10:32
Оценка: 3 (1)
Здравствуйте, givi, Вы писали:

G>Хочу запустить в отдельном потоке функцию С ПАРАМЕТРАМИ, как это сделать???


вызвать эту функцию через делегат. delegatName.BeginInvoke(параметры тут);
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[9]: Thread в C#
От: Lloyd Россия  
Дата: 19.05.07 07:06
Оценка: +1
Здравствуйте, evi, Вы писали:

MMP>>МС советует использовать для коротких вещей.


evi>А что предпологается использовать для длинных вещей?


Самостоятельно создавать thread и использовать его.
Thread в C#
От: givi  
Дата: 04.12.02 10:27
Оценка:
Хочу запустить в отдельном потоке функцию С ПАРАМЕТРАМИ, как это сделать???
Re[2]: Thread в C#
От: givi  
Дата: 04.12.02 10:50
Оценка:
Здравствуйте, TK, Вы писали:

TK>вызвать эту функцию через делегат. delegatName.BeginInvoke(параметры тут);


Извини, немного протупляю, как надо исправить следующий код чтобы он заработал :

public static void WorkerProcess( int PARAMETER )
{
}

public void Start()
{
int PARAMETER = 0;
ThreadStart worker = new ThreadStart( WorkerProcess );
worker.BeginInvoke(
Thread t = new Thread( worker );
t.Start();
}

как передать параметр PARAMETR в функцию WorkerProcess
Re: Thread в C#
От: Lloyd Россия  
Дата: 04.12.02 11:05
Оценка:
Здравствуйте, givi, Вы писали:

G>Хочу запустить в отдельном потоке функцию С ПАРАМЕТРАМИ, как это сделать???


Я бы сделал так:


private class ThreadLauncher{
  public int parameter;
  public void Run() 
  { 
  }
}

public void Start() 
{ 
  ThreadLauncher launcher = new ThreadLauncher();
  launcher.parameter = 0;

  Thread t = new Thread(new ThreadStart(launcher.Run)); 
  t.Start(); 
}
Re[3]: Thread в C#
От: TK Лес кывт.рф
Дата: 04.12.02 11:08
Оценка:
Здравствуйте, givi, Вы писали:

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


TK>>вызвать эту функцию через делегат. delegatName.BeginInvoke(параметры тут);


G>Извини, немного протупляю, как надо исправить следующий код чтобы он заработал :xz: :???: :


G>public static void WorkerProcess( int PARAMETER )

G>{
G>}

G>public void Start()

G>{
G> int PARAMETER = 0;
G> ThreadStart worker = new ThreadStart( WorkerProcess );
G> worker.BeginInvoke(
G> Thread t = new Thread( worker );
G> t.Start();
G>}

G>как передать параметр PARAMETR в функцию WorkerProcess :???:


public delagate void WorkerProcessDelagate ( int PARAMETER );
WorkerProcessDelagate wpd = new WorkerProcessDelagate(WorkerProcess);
wpd.BeginInvoke(7);
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[4]: Thread в C#
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 04.12.02 11:24
Оценка:
TK>public delagate void WorkerProcessDelagate ( int PARAMETER );
TK>WorkerProcessDelagate wpd = new WorkerProcessDelagate(WorkerProcess);
TK>wpd.BeginInvoke(7);

А можно ли треды "созданные" таким образом "подвешивать" на длительное время?
Re[5]: Thread в C#
От: TK Лес кывт.рф
Дата: 04.12.02 11:26
Оценка:
Здравствуйте, DarkGray, Вы писали:

TK>>public delagate void WorkerProcessDelagate ( int PARAMETER );

TK>>WorkerProcessDelagate wpd = new WorkerProcessDelagate(WorkerProcess);
TK>>wpd.BeginInvoke(7);

DG>А можно ли треды "созданные" таким образом "подвешивать" на длительное время?


Треды для этого берутся из пула со всеми вытекающими.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[6]: Thread в C#
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 04.12.02 11:34
Оценка:
TK>Треды для этого берутся из пула со всеми вытекающими.

Про пул я знаю.

Мне интересны эти самые "вытекающие"...
Re[7]: Thread в C#
От: TK Лес кывт.рф
Дата: 04.12.02 11:41
Оценка:
Здравствуйте, DarkGray, Вы писали:

TK>>Треды для этого берутся из пула со всеми вытекающими.


DG>Про пул я знаю.


DG>Мне интересны эти самые "вытекающие"...


Если количество рабочих потоков станет равно 0 то, перестатут работать серверные таймеры, различные уведомления и т.п.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[8]: Thread в C#
От: evi  
Дата: 19.05.07 06:59
Оценка:
Здравствуйте, MaxMP, Вы писали:

MMP>Вытекающие таковы — для процесса (не AppDomain) выбеляется макс. 25 "тредов". То есть они могут элементарно кончиться.


MMP>МС советует использовать для коротких вещей.


А что предпологается использовать для длинных вещей?
Re[9]: Thread в C#
От: Arboz Россия  
Дата: 19.05.07 12:29
Оценка:
... или Custom Thread Pool.
Re[5]: Thread в C#
От: _Morpheus_  
Дата: 21.05.07 09:31
Оценка:
Здравствуйте, DarkGray, Вы писали:

TK>>public delagate void WorkerProcessDelagate ( int PARAMETER );

TK>>WorkerProcessDelagate wpd = new WorkerProcessDelagate(WorkerProcess);
TK>>wpd.BeginInvoke(7);

DG>А можно ли треды "созданные" таким образом "подвешивать" на длительное время?


нельзя, для таких вещей делай свой поток:

int PARAMETER = 0;


Thread thread = new Thread(new ParametrizedThreadStart(WorkerProcess));
thread.Name = "MyThread";
thread.IsBackground = true;
thread.Start( PARAMETER );
... << RSDN@Home 1.2.0 alpha rev. 676>>
Re[2]: Thread в C#
От: _Morpheus_  
Дата: 21.05.07 09:35
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Я бы сделал так:

L>
L>private class ThreadLauncher{
L>  public int parameter;
L>  public void Run() 
L>  { 
L>  }
L>}

L>public void Start() 
L>{ 
L>  ThreadLauncher launcher = new ThreadLauncher();
L>  launcher.parameter = 0;

L>  Thread t = new Thread(new ThreadStart(launcher.Run)); 
L>  t.Start(); 
L>} 
L>


это проще анонимным делегатом записать:

public void Start() 
{ 
  int parameter = 0;
    
    Thread t = new Thread(new ThreadStart(delegate() { WorkerProcedure(parameter); }  )); 
    t.Start();
}


а вообще во втором фреймворке есть ParametrizedThreadStart, см. тут
Автор: _Morpheus_
Дата: 21.05.07
... << RSDN@Home 1.2.0 alpha rev. 676>>
Re[6]: Thread в C#
От: eag Россия  
Дата: 21.05.07 09:52
Оценка:
Здравствуйте, _Morpheus_, Вы писали:

DG>>А можно ли треды "созданные" таким образом "подвешивать" на длительное время?


_M_>нельзя, для таких вещей делай свой поток:


_M_>
_M_>int PARAMETER = 0;


_M_>Thread thread = new Thread(new ParametrizedThreadStart(WorkerProcess));
_M_>thread.Name = "MyThread";
_M_>thread.IsBackground = true;
_M_>thread.Start( PARAMETER );
_M_>


Такой подход позволяет перелать только один параметр. Для передачи нескольких параметров в C# 2.0 можно передавать анонимный метод, из которго вызывать метод, принимающий любое количество параметров. Правда в таком подходе тоже есть свои подводные камни, например переданные в вызываемую функцию переменные могут быть изменены в главном потоке.
Три великие достоинства программиста: лень, нетерпение, надменность... Л. Уолл
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.