2009-10-21 3 views
-1

мой вопрос: Я пытаюсь работать с многопоточной TECHNIC поэтому я использовал Threadpool но то, что я хочу, это следующий Я хочу, чтобы определить размер ThreadPool, когда программа начинает , когда у меня есть Данные для управления, я возьму нить из ThreadPool для работы с этим элементом, , так как я прочитал, вы можете определить элементы в threadPool, как хотите, но каждый поток будет запускаться автоматически. Я хочу иметь контроль над потоком, чтобы определить, когда поток должен запускаться Если нет данных Поток должен ждать (или останавливаться), когда у меня есть новые данные (это похоже на запрос) один из потоков будет работать ..... спасибоиспользования ThreadPool

+3

WTF. Здесь нет никаких вопросов. Вопросы заканчиваются вопросительными знаками (?). Кроме того, это бессвязная, бессвязная мысль. Серьезно, я не могу даже найти отдельные предложения здесь. Голосовать-To-Close. – abelenky

ответ

2

При использовании ThreadPool вы обычно ставите в очередь запрос в пул с некоторыми (необязательными) входными данными, что приведет к тому, что пул будет выбирать доступный поток и запустить процесс. Когда это будет сделано, поток будет возвращен в пул и будет доступен для другого запроса. Вы, как правило, не нужно беспокоиться об управлении потоками, но может просто очередь рабочий элемент, когда это необходимо:

DataToWorkWith dataItem = GetDataToWorkWith(); 
if (dataItem != null) 
{ 
    ThreadPool.QueueUserWorkItem(MyProcessingMethod, dataItem); 
} 


// somewhere else in the class 
private void MyProcessingMethod(object dataItem) 
{ 
    // work with the dataItem; this will run on a threadpool thread, if 
    // invoked through the thread pool 
} 

Таким образом, все, что вам нужно будет сделать, это создать какой-то процесс, выясняя, если есть данные для работы с, очередь запросов в ThreadPool и пусть он выполняет свою работу.

0

Вот краткое резюме на C# ThreadPool Usage. Вот MSDN How To: Use a ThreadPool. И вот ссылка ThreadPool.

В частности, вы можете получить доступную информацию, используя GetAvailableThreads. Вы также можете контролировать минимальное и максимальное количество потоков в пуле потоков, используя SetMinThreads и SetMaxThreads.

В общем, я бы посоветовал не вмешиваться в число потоков, если вы точно не знаете, что делаете. Пул потоков совместно используется вами и компонентами CLR, поэтому, изменяя количество потоков, вы можете повлиять на поведение CLR. Для получения дополнительной информации прочитайте раздел «Примечания» в документации класса ThreadPool.

0

Обычно вы не управляете потоками нитей ThreadPool вручную. Рекомендуемое использование - очередь делегата, как показано на примере Fredrik, и пусть ThreadPool управляет потоком. С этим соглашением, если нет данных, вы не должны ставить в очередь любую работу. Когда данные становятся доступными, вы можете поставить в очередь работу. Если вы ищете способ запуска фонового процесса, при запуске приложения вы можете создать Timer и добавить его в состояние приложения, или вы можете определить статический класс, который управляет Timer, и коснитесь этого класса при запуске приложения ,

Смежные вопросы