Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Нубский вопрос по ThreadPool


Автор: vLite 21.10.2008, 21:54
Здравствуйте , я новичек в программировании под .NET и в целом.

Я столкнулся с проблемой при работе с классом ThreadPool. Он просто не работает.
Вот код метода Main
Код

static void Main(string[] args)
        {
            int workThreads;
            int complThreads;

            ThreadPool.GetMaxThreads(out workThreads, out complThreads);

            Console.WriteLine("Max Work Threads: {0} & Max Compl Threads: {1}", workThreads, complThreads);

            for(int i = 0; i < 5; i++)
            {
                ThreadPool.QueueUserWorkItem(ActionItem);
            }
        }


Вот код метода для запуска
Код

static void ActionItem(object state)
        {
            Console.WriteLine("Current thread : {0}", Thread.CurrentThread.ManagedThreadId);
        }


В результате на консоле я вижу только :
Max Work Threads : 1000 & Max Compl Threads : 1000 // Это результат первой строки

А вот работу ThreadPool я не вижу..
Почему так?

Автор: Antarn 21.10.2008, 22:13
У меня ваш код выдал
Цитата

Max Work Threads: 250 & Max Compl Threads: 1000
Current thread : 6
Current thread : 6
Current thread : 6
Current thread : 6
Current thread : 6

Попробуйте так же заменить
Код

ThreadPool.QueueUserWorkItem(ActionItem);

на
Код

ThreadPool.QueueUserWorkItem(new WaitCallback(ActionItem));

Автор: vLite 21.10.2008, 22:17
Поставил как ты просил , но это одно и тоже.

Поменял в цикле i <= 10000000
Теперь вижу в консоле идёт прогресс , НО!
Он останавливается на :
30668 -> Current thread : 3
30669 -> Current thread : 3
30670 -> Current thread : 3
30671 -> Current thread : 3
30662 -> Current thread : 4
30672 -> Current thread : 3
30674 -> Current thread : 3
30675 -> Current thread : 3
30676 -> Current thread : 3
30677 -> Current thread : 3
30678 -> Current thread : 3
Press any key to continue . . .


Он не доходит до значения 10000000? Или чтото другое?
А процессор не влияет на это? Просто у меня 4х ядерный...

Автор: PashaPash 21.10.2008, 22:58
vLite, ты выходишь из главного потока сразу после запуска остальных. Добавь Console.ReadLine();

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)