Здравствуйте, DarkGray, Вы писали:
TK>>Треды для этого берутся из пула со всеми вытекающими.
DG>Про пул я знаю.
DG>Мне интересны эти самые "вытекающие"...
Вытекающие таковы — для процесса (не AppDomain) выбеляется макс. 25 "тредов". То есть они могут элементарно кончиться.
Здравствуйте, 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
Здравствуйте, 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();
}
Здравствуйте, 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);
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Здравствуйте, DarkGray, Вы писали:
TK>>public delagate void WorkerProcessDelagate ( int PARAMETER ); TK>>WorkerProcessDelagate wpd = new WorkerProcessDelagate(WorkerProcess); TK>>wpd.BeginInvoke(7);
DG>А можно ли треды "созданные" таким образом "подвешивать" на длительное время?
Треды для этого берутся из пула со всеми вытекающими.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Здравствуйте, DarkGray, Вы писали:
TK>>Треды для этого берутся из пула со всеми вытекающими.
DG>Про пул я знаю.
DG>Мне интересны эти самые "вытекающие"...
Если количество рабочих потоков станет равно 0 то, перестатут работать серверные таймеры, различные уведомления и т.п.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Здравствуйте, MaxMP, Вы писали:
MMP>Вытекающие таковы — для процесса (не AppDomain) выбеляется макс. 25 "тредов". То есть они могут элементарно кончиться.
MMP>МС советует использовать для коротких вещей.
А что предпологается использовать для длинных вещей?
Здравствуйте, 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 );
Здравствуйте, _Morpheus_, Вы писали:
DG>>А можно ли треды "созданные" таким образом "подвешивать" на длительное время?
_M_>нельзя, для таких вещей делай свой поток:
_M_>
Такой подход позволяет перелать только один параметр. Для передачи нескольких параметров в C# 2.0 можно передавать анонимный метод, из которго вызывать метод, принимающий любое количество параметров. Правда в таком подходе тоже есть свои подводные камни, например переданные в вызываемую функцию переменные могут быть изменены в главном потоке.
Три великие достоинства программиста: лень, нетерпение, надменность... Л. Уолл