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


Автор: gogzor 1.11.2008, 15:13
Всем привет.
У меня есть программа  в которой используется класс ThreadPool , в нём работает масса потоков.
Возможно ли както остановить потоки внутри ThreadPool? Потому что базовых методов я не нашёл..
Делать Thread.CurrentThread.Abort() для текущего потока тоже не получается...

Как можно остановить всё это дело?

Автор: archeg 1.11.2008, 16:29
Я так понимаю они и не должны останавливаться. Это же пул - они всегда должны быть открыты. Попробуй просто выйти из логики, внутри потока

Автор: gogzor 1.11.2008, 17:07
Цитата(archeg @  1.11.2008,  16:29 Найти цитируемый пост)
Попробуй просто выйти из логики, внутри потока 

Не очень понял , если честно.. Можете пояснить?

Автор: archeg 1.11.2008, 21:07
Цитата(gogzor @ 1.11.2008,  17:07)
Цитата(archeg @  1.11.2008,  16:29 Найти цитируемый пост)
Попробуй просто выйти из логики, внутри потока 

Не очень понял , если честно.. Можете пояснить?

Ну типа что-то в потоке:
Код

while (needToWork)
{
     DoWork();
}

Тут бах - основной поток поставил needToWork = false, остановились. И про потокобезопасность не забываем....

З.Ы. Вообще проверил - у меня Abort() работает - так что можно и его попробовать. Почему у вас не работает - не знаю. Че пишет? Правда не знаю как пул ведет себя при аборте - надеюсь не уничтожает поток (тогда толку с пула?)
Если не нравиться то что  поток должен уничтожать сам себя - можно хранить ссылки на все потоки (к примеру при старте потока, он подписуеться, передавая екземпляр Thread.CurrentThread в основной поток по-скольку Queue не возвращает екземпляр потока) - потом можно управлять потоками с помощью списка ссылок

Добавлено @ 21:11
Да, абортить плохо. Вот тут решение:
http://msdn.microsoft.com/en-us/magazine/cc163644.aspx

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