using System;
using System.Threading;
namespace Kapitel4.Threading {
public class ThreadPooling {
public static void WorkerProcess(object state) {
while(true) { // endlos lange Aufgabe
Thread.Sleep(2000);
Console.WriteLine("WorkerProcess:{0}",state);
}
}
public static void TinyWorkerProcess(object state) {
Thread.Sleep(5000); // kurze Aufgabe
Console.WriteLine("TinyWorkerProcess:{0}",state);
}
public static void Main(string[] argv) {
int wThreads; // WorkerThreads
int asIO; // Asynchrone IO-Threads
// Wie viele WorkerThreads stehen den verschiedenen Aufgaben maximal zur
// Verf�gung?
ThreadPool.GetMaxThreads(out wThreads,out asIO);
Console.WriteLine("Max. WorkerThreads:{0}",wThreads);
Console.WriteLine("Max. Asynchronous IO/Threads:{0}",asIO);
// 3 Arbeitsaufgaben werden angelegt
for(int i=0;i <3;i++) {
ThreadPool.QueueUserWorkItem(new WaitCallback(WorkerProcess),i);
}
// zus�tzlich werden noch 3 weitere Aufgaben festgelegt, die 5000ms warten
// und dann nur eine Ausgaben durchf�hren, bevor sie wieder beendet werden.
for(int i=0;i <3;i++) {
ThreadPool.QueueUserWorkItem(new WaitCallback(TinyWorkerProcess),i);
}
// st�ndige Kontrolle wie viele WorkerThreads aktuell noch zur Verf�gung stehen
while(true) { // Endlosschleife!!
Thread.Sleep(5000);
ThreadPool.GetAvailableThreads(out wThreads,out asIO);
Console.WriteLine("Aktuell verf�gbare WorkerThreads:{0}",wThreads);
Console.WriteLine("Aktuell verf�gbare IO/Threads:{0}",asIO);
}
}
}
}
|