Многопоточность с проверкой - PullRequest
1 голос
/ 25 апреля 2011

Я хотел написать программу, которая будет проверять прокси ... Я хотел использовать многопоточность, но на самом деле не знаю, как применить ее к моей программе:

int ktory = 0;

// Button to start multithreading
private void p_check_Click(object sender, EventArgs e)
{
    for (int i = 0; i < 10; i++)
    {
        Thread th = new Thread(test_proxy);
        CheckForIllegalCrossThreadCalls = false;
        th.Start();
    }

}

//This is my function to test proxies
private void test_proxy()
{
    try
    {

        int ile = p_listbox.Items.Count;

        string proxy = null;
        //'ktory' - means position in listbox
        proxy = p_listbox.Items[ktory].ToString();
        ktory += 1;

        //Splitting on IP and PORT
        int gdzie = proxy.IndexOf(":");
        string IP = proxy.Remove(gdzie);
        string ipp = proxy.Replace(IP + ":", "");
        int PORT = Int32.Parse(ipp);
        //end o splitting

        //My testing of anonimty ( works good don`t need to check)
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(p_proxyjudge.Text);
        WebProxy adr_proxy = new WebProxy(IP, PORT);
        adr_proxy.UseDefaultCredentials = true;
        request.Proxy = adr_proxy;
        request.Timeout = 15000;

        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        Stream stream = response.GetResponseStream();

        // Checking if anonymous ( not important)
        StreamReader sr = new StreamReader(stream);
        while (sr.EndOfStream != true)
        {
            string checking = sr.ReadLine();
            if (!checking.Contains("REMOTE_ADDR ="))
                p_work.Items.Add(proxy);
        }

        sr.Close();
        stream.Close();
    }
    catch (Exception ex)
    {
        ktory += 1;
    }
}

<К коду: ile and ktoryкак и я, или j как многочисленные переменные>

Но моя многопоточность останавливается на 10 первых прокси или просто проверяет их 10 раз как один ...

Основная проблема состоит в том, чтобы сделать 10 ботовпроверить прокси и после завершения проверки, один прокси переходит на другой в списке (но все же другие боты работают в фоновом режиме)

ПОЖАЛУЙСТА, ПОМОГИТЕ МНЕ :) Я сижу на 2-й день и не могу понять это

1 Ответ

2 голосов
/ 25 апреля 2011

Вы не ограничиваете доступ к ktory, который изменяется несколькими потоками.Из-за этого нет никакой гарантии, что ваши 10 потоков будут проверять 10 различных прокси.

Object _lock = new Object();
int ktory=0;

...
private void test_proxy()
{
   try
   {
     int ile = p_listbox.Items.Count;

     string proxy = null;
     //'ktory' - means position in listbox
     lock (_lock) {
       proxy = p_listbox.Items[ktory].ToString();
       ktory += 1;
     }
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...