2014-03-19 2 views
0

Мой запрос: У меня есть метод, который должен вызываться на определенном интервале с определенным количеством потоков на этом интервале, а затем оставаться без дела после следующего вызова.Как ограничить количество потоков в определенный интервал?

Чтобы быть более ясно на этом, я представил пример код ниже:

namespace ThreadTest 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
     Initialize Components(); 
     } 
    } 

    public void ExtractDatafromWebPage() 
    { 
     //Code for extracting data from web page using HTTPWebRequest and HTTPWebResponse class 
    } 

    private void btn1_Click(object sender, EventArgs e) 
    { 
    // On clicking the button the ExtractDatafromWebPage() method should be called with 5 threads at every 10 seconds. 
    } 
} 

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

+0

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

+0

Какую версию .NET вы используете? – Alex

ответ

0

Вы можете сделать что-то подобное, как показано ниже, если я правильно понимаю ваш вопрос (так как я не уверен, что вы имеете в виду: «только 5 потоков должны быть связаны с этим методом»)

И если вы подразумеваете, что только пять потоков должны ввести метод, а затем просто иметь семафор со счетом «5».

проходят в число потоков, которые необходимо нерест, период времени и т.д.

private void btn1_Click(object sender, EventArgs e) 
     { 
      // On clicking the button the ExtractDatafromWebPage() method should be called with 5 threads at every 10 seconds. 
      Timer t = new System.Threading.Timer(
       () => 
       { 
        for (int i = 1; i <= 5; i++) 
        { 
         //you can use thread pool thread 
         new Thread(() => this.ExtractDatafromWebPage()).Start(); 
        } 
       }, null, 0, 10 * 1000); 
     } 
Смежные вопросы