PDA

Просмотр полной версии : Потоки


vkvova5
20.08.2011, 13:48
Дорогие пользователи жука:confused:... снова обрашяйюсь к вам.... к примеру мне в в отдельном потоке надо запустить отправку запроса 25 раз.... как этого добится..... и чтобы поток проработал ровно 25 раз и остановился?

textBox1.Invoke(new EventHandler(delegate { login = textBox1.Text ; }));
maskedTextBox1.Invoke(new EventHandler(delegate { pass = maskedTextBox1.Text; }));
[Ссылки могут видеть только зарегистрированные и активированные пользователи] request1 = ([Ссылки могут видеть только зарегистрированные и активированные пользователи])WebRequest.Create("[Ссылки могут видеть только зарегистрированные и активированные пользователи]" + login + "&pass=" + pass);
request1.AllowAutoRedirect = false;
request1.Method = "GET";
// request1.Proxy = new WebProxy(ip, port);
request1.Timeout = 10000; // Таймаут любой на ваше усмотрение
string header = request1.GetResponse().Headers.ToString();
request1.Accept = "application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5";
request1.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16";
[Ссылки могут видеть только зарегистрированные и активированные пользователи] response = ([Ссылки могут видеть только зарегистрированные и активированные пользователи])request1.GetResponse();
String str = new StreamReader(response.GetResponseStream(), Encoding.UTF8).ReadToEnd();
response.Close();
Regex regex = new Regex("sid=([a-z0-9]+); exp"); if (regex.IsMatch(header)) { MatchCollection matchs = regex.Matches(header); foreach (Match match1 in matchs) { sid = match1.Groups[1].ToString(); } }
cook = new Cookie("remixsid", sid); //Записываем Cookie
cook.Domain = "vkontakte.ru";

Hermein
20.08.2011, 16:59
public void potok()
{for(int i=0;i<25;i++){
textBox1.Invoke(new EventHandler(delegate { login = textBox1.Text ; }));
maskedTextBox1.Invoke(new EventHandler(delegate { pass = maskedTextBox1.Text; }));
[Ссылки могут видеть только зарегистрированные и активированные пользователи] request1 = ([Ссылки могут видеть только зарегистрированные и активированные пользователи])WebRequest.Create("[Ссылки могут видеть только зарегистрированные и активированные пользователи]" + login + "&pass=" + pass);
request1.AllowAutoRedirect = false;
request1.Method = "GET";
// request1.Proxy = new WebProxy(ip, port);
request1.Timeout = 10000; // Таймаут любой на ваше усмотрение
string header = request1.GetResponse().Headers.ToString();
request1.Accept = "application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5";
request1.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16";
[Ссылки могут видеть только зарегистрированные и активированные пользователи] response = ([Ссылки могут видеть только зарегистрированные и активированные пользователи])request1.GetResponse();
String str = new StreamReader(response.GetResponseStream(), Encoding.UTF8).ReadToEnd();
response.Close();
Regex regex = new Regex("sid=([a-z0-9]+); exp"); if (regex.IsMatch(header)) { MatchCollection matchs = regex.Matches(header); foreach (Match match1 in matchs) { sid = match1.Groups[1].ToString(); } }
cook = new Cookie("remixsid", sid); //Записываем Cookie
cook.Domain = "vkontakte.ru";
}}

запустить поток:

Thread thread = new Thread(potok);
thread.IsBackground = true;
if(!thread.IsAlive){thread.Start();}

vkvova5
20.08.2011, 17:10
Hermein, а как запустить два потока но чтобі второй раьбтал на 1 сек позднее чем первый?

Hermein
20.08.2011, 17:20
насчет задержек это не ко мне, а 2 потока:

Thread[] threads = new Thread[2];

for (int i = 0; i < 2; i++)
{
Thread t = new Thread(new ThreadStart(potok));
threads[i] = t;
}
for (int i = 0; i < 2; i++)
{
if(!threads[i].isAlive){ threads[i].Start();}
}

vkvova5
20.08.2011, 17:23
Hermein, А если работать через потоки то будет меньше логать чем через бекгроундвокер?

Hermein
20.08.2011, 17:30
Hermein, А если работать через потоки то будет меньше логать чем через бекгроундвокер?

Нет, там в принципе одинаково, просто многопоточность использовать можно в потоках, а воркер - это элемент обычный, используется для того чтобы не висела форма

vkvova5
20.08.2011, 17:32
Посмотреть сообщение
Hermein, А если работать через потоки то будет меньше логать чем через бекгроундвокер?
Нет, там в принципе одинаково, просто многопоточность использовать можно в потоках, а воркер - это элемент обычный, используется для того чтобы не висела форма
Hermein, но при отправке и приёме запроса форма висит полностью этого как то можно избежать?

Hermein
20.08.2011, 17:35
Hermein, но при отправке и приёме запроса форма висит полностью этого как то можно избежать?

Пост н1 - факт от которого виснит форма будет выполняться параллельно, следовательно форма висеть не будет, так же используются воркеры для более мелких целей, для долгих расчетов или выполнений все же использовать надо потоки /problem

vkvova5
21.08.2011, 01:13
Hermein, Смотри я зделал вот так будет работать?
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Threading;
using System.Net;

namespace WindowsFormsApplication32
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
int i = 0;
string ip = "127.0.0.1";
int port = 8888;
string str = null, str2 = null;
private void button1_Click(object sender, EventArgs e)
{
Thread[] threads = new Thread[2];

for (int i = 0; i < 3; i++)
{
if (i == 0)
{
Thread t = new Thread(new ThreadStart(potok1));
threads[i] = t;
}
if (i == 1)
{
Thread t = new Thread(new ThreadStart(potok2));
threads[1] = t;
}
if (i == 2)
{
Thread t = new Thread(new ThreadStart(potok3));
threads[i] = t;
}
if (i == 3)
{
Thread t = new Thread(new ThreadStart(potok4));
threads[i] = t;
}

}
for (int i = 0; i < 3; i++)
{
{ threads[i].Start(); }
}
}
public void potok1()
{
Thread.Sleep(0x2710);
String s1 = "method=getCityInfo&user=" + str + "&city=10&key=" + str2 + "";
[Ссылки могут видеть только зарегистрированные и активированные пользователи] request = ([Ссылки могут видеть только зарегистрированные и активированные пользователи])WebRequest.Create("[Ссылки могут видеть только зарегистрированные и активированные пользователи]");
request.UserAgent = "Opera/9.80";
request.Method = "POST";
request.Proxy = new WebProxy(ip, port);
request.ContentType = "application/x-[Ссылки могут видеть только зарегистрированные и активированные пользователи]";
byte[] EncodedPostParams = Encoding.ASCII.GetBytes(s1);
request.ContentLength = EncodedPostParams.Length;
request.GetRequestStream().Write(EncodedPostParams , 0, EncodedPostParams.Length);
string html = new StreamReader(request.GetResponse().GetResponseStre am(), Encoding.UTF8).ReadToEnd();
}
public void potok2()
{
Thread.Sleep(0x2710);
String s1 = "method=getCityInfo&user=" + str + "&city=10&key=" + str2 + "";
[Ссылки могут видеть только зарегистрированные и активированные пользователи] request = ([Ссылки могут видеть только зарегистрированные и активированные пользователи])WebRequest.Create("[Ссылки могут видеть только зарегистрированные и активированные пользователи]");
request.UserAgent = "Opera/9.80";
request.Method = "POST";
request.Proxy = new WebProxy(ip, port);
request.ContentType = "application/x-[Ссылки могут видеть только зарегистрированные и активированные пользователи]";
byte[] EncodedPostParams = Encoding.ASCII.GetBytes(s1);
request.ContentLength = EncodedPostParams.Length;
request.GetRequestStream().Write(EncodedPostParams , 0, EncodedPostParams.Length);
string html = new StreamReader(request.GetResponse().GetResponseStre am(), Encoding.UTF8).ReadToEnd();
}
public void potok3()
{
Thread.Sleep(0x2710);
String s1 = "method=getCityInfo&user=" + str + "&city=10&key=" + str2 + "";
[Ссылки могут видеть только зарегистрированные и активированные пользователи] request = ([Ссылки могут видеть только зарегистрированные и активированные пользователи])WebRequest.Create("[Ссылки могут видеть только зарегистрированные и активированные пользователи]");
request.UserAgent = "Opera/9.80";
request.Method = "POST";
request.Proxy = new WebProxy(ip, port);
request.ContentType = "application/x-[Ссылки могут видеть только зарегистрированные и активированные пользователи]";
byte[] EncodedPostParams = Encoding.ASCII.GetBytes(s1);
request.ContentLength = EncodedPostParams.Length;
request.GetRequestStream().Write(EncodedPostParams , 0, EncodedPostParams.Length);
string html = new StreamReader(request.GetResponse().GetResponseStre am(), Encoding.UTF8).ReadToEnd();
}
public void potok4()
{
Thread.Sleep(0x2710);
String s1 = "method=getCityInfo&user=" + str + "&city=10&key=" + str2 + "";
[Ссылки могут видеть только зарегистрированные и активированные пользователи] request = ([Ссылки могут видеть только зарегистрированные и активированные пользователи])WebRequest.Create("[Ссылки могут видеть только зарегистрированные и активированные пользователи]");
request.UserAgent = "Opera/9.80";
request.Method = "POST";
request.Proxy = new WebProxy(ip, port);
request.ContentType = "application/x-[Ссылки могут видеть только зарегистрированные и активированные пользователи]";
byte[] EncodedPostParams = Encoding.ASCII.GetBytes(s1);
request.ContentLength = EncodedPostParams.Length;
request.GetRequestStream().Write(EncodedPostParams , 0, EncodedPostParams.Length);
string html = new StreamReader(request.GetResponse().GetResponseStre am(), Encoding.UTF8).ReadToEnd();
}

}
}

я не знаю в чом ошибка подскажи)

TeedI
21.08.2011, 01:40
Hermein, Смотри я зделал вот так будет работать?
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Threading;
using System.Net;

namespace WindowsFormsApplication32
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
int i = 0;
string ip = "127.0.0.1";
int port = 8888;
string str = null, str2 = null;
private void button1_Click(object sender, EventArgs e)
{
Thread[] threads = new Thread[2];

for (int i = 0; i < 3; i++)
{
if (i == 0)
{
Thread t = new Thread(new ThreadStart(potok1));
threads[i] = t;
}
if (i == 1)
{
Thread t = new Thread(new ThreadStart(potok2));
threads[1] = t;
}
if (i == 2)
{
Thread t = new Thread(new ThreadStart(potok3));
threads[i] = t;
}
if (i == 3)
{
Thread t = new Thread(new ThreadStart(potok4));
threads[i] = t;
}

}
for (int i = 0; i < 3; i++)
{
{ threads[i].Start(); }
}
}
public void potok1()
{
Thread.Sleep(0x2710);
String s1 = "method=getCityInfo&user=" + str + "&city=10&key=" + str2 + "";
[Ссылки могут видеть только зарегистрированные и активированные пользователи] request = ([Ссылки могут видеть только зарегистрированные и активированные пользователи])WebRequest.Create("[Ссылки могут видеть только зарегистрированные и активированные пользователи]");
request.UserAgent = "Opera/9.80";
request.Method = "POST";
request.Proxy = new WebProxy(ip, port);
request.ContentType = "application/x-[Ссылки могут видеть только зарегистрированные и активированные пользователи]";
byte[] EncodedPostParams = Encoding.ASCII.GetBytes(s1);
request.ContentLength = EncodedPostParams.Length;
request.GetRequestStream().Write(EncodedPostParams , 0, EncodedPostParams.Length);
string html = new StreamReader(request.GetResponse().GetResponseStre am(), Encoding.UTF8).ReadToEnd();
}
public void potok2()
{
Thread.Sleep(0x2710);
String s1 = "method=getCityInfo&user=" + str + "&city=10&key=" + str2 + "";
[Ссылки могут видеть только зарегистрированные и активированные пользователи] request = ([Ссылки могут видеть только зарегистрированные и активированные пользователи])WebRequest.Create("[Ссылки могут видеть только зарегистрированные и активированные пользователи]");
request.UserAgent = "Opera/9.80";
request.Method = "POST";
request.Proxy = new WebProxy(ip, port);
request.ContentType = "application/x-[Ссылки могут видеть только зарегистрированные и активированные пользователи]";
byte[] EncodedPostParams = Encoding.ASCII.GetBytes(s1);
request.ContentLength = EncodedPostParams.Length;
request.GetRequestStream().Write(EncodedPostParams , 0, EncodedPostParams.Length);
string html = new StreamReader(request.GetResponse().GetResponseStre am(), Encoding.UTF8).ReadToEnd();
}
public void potok3()
{
Thread.Sleep(0x2710);
String s1 = "method=getCityInfo&user=" + str + "&city=10&key=" + str2 + "";
[Ссылки могут видеть только зарегистрированные и активированные пользователи] request = ([Ссылки могут видеть только зарегистрированные и активированные пользователи])WebRequest.Create("[Ссылки могут видеть только зарегистрированные и активированные пользователи]");
request.UserAgent = "Opera/9.80";
request.Method = "POST";
request.Proxy = new WebProxy(ip, port);
request.ContentType = "application/x-[Ссылки могут видеть только зарегистрированные и активированные пользователи]";
byte[] EncodedPostParams = Encoding.ASCII.GetBytes(s1);
request.ContentLength = EncodedPostParams.Length;
request.GetRequestStream().Write(EncodedPostParams , 0, EncodedPostParams.Length);
string html = new StreamReader(request.GetResponse().GetResponseStre am(), Encoding.UTF8).ReadToEnd();
}
public void potok4()
{
Thread.Sleep(0x2710);
String s1 = "method=getCityInfo&user=" + str + "&city=10&key=" + str2 + "";
[Ссылки могут видеть только зарегистрированные и активированные пользователи] request = ([Ссылки могут видеть только зарегистрированные и активированные пользователи])WebRequest.Create("[Ссылки могут видеть только зарегистрированные и активированные пользователи]");
request.UserAgent = "Opera/9.80";
request.Method = "POST";
request.Proxy = new WebProxy(ip, port);
request.ContentType = "application/x-[Ссылки могут видеть только зарегистрированные и активированные пользователи]";
byte[] EncodedPostParams = Encoding.ASCII.GetBytes(s1);
request.ContentLength = EncodedPostParams.Length;
request.GetRequestStream().Write(EncodedPostParams , 0, EncodedPostParams.Length);
string html = new StreamReader(request.GetResponse().GetResponseStre am(), Encoding.UTF8).ReadToEnd();
}

}
}

я не знаю в чом ошибка подскажи)

:shock:

зачем же так все ужложнять?


public int;
List<string> str = new List<string>();
List<string> str2 = new List<string>();
В методе заносим значение.
for(i = 0; i < mass.Lengch(кол-во читаймых строк); i++)
{
str.Insert(i,id);
str2.Insert(i,auth);
}

public void potok()

{

for(i = 0; i < mass.Lengch; i++)
{
String s1 = "method=getCityInfo&user=" + str[i].ToString() + "&city=10&key=" + str2[i].ToString() + "";
[Ссылки могут видеть только зарегистрированные и активированные пользователи] request = ([Ссылки могут видеть только зарегистрированные и активированные пользователи])WebRequest.Create("[Ссылки могут видеть только зарегистрированные и активированные пользователи]");
request.UserAgent = "Opera/9.80";
request.Method = "POST";
request.Proxy = new WebProxy(ip, port);
request.ContentType = "application/x-[Ссылки могут видеть только зарегистрированные и активированные пользователи]";
byte[] EncodedPostParams = Encoding.ASCII.GetBytes(s1);
request.ContentLength = EncodedPostParams.Length;
request.GetRequestStream().Write(EncodedPostParams , 0, EncodedPostParams.Length);
string html = new StreamReader(request.GetResponse().GetResponseStre am(), Encoding.UTF8).ReadToEnd();
}

}
}
private void button1_Click(object sender, EventArgs e)
{
int j = 10;
Thread[] pp = new Thread[j];
for(i = 0; i < j; i++)
{
pp[i] = new Thread(new ThreadStart(potok));
}
for(i = 0; i < j; i++)
{
pp[i].Start();
}
}

Как то так,возможны ошибки

vkvova5
21.08.2011, 01:43
TeedI, так ссылка запроса другая) а ты для одной зделал) хД
Боже мой 64 ошибки(

TeedI
21.08.2011, 01:49
TeedI, так ссылка запроса другая) а ты для одной зделал) хД

Одной и надо, мы создаем 10 потоков метода potoc.
При его вызове значение str str2 по сути /problem должны иметь разные значения, для каждого потока.
Метод будет выполняться пока не кончится кол-во строк в файле.

vkvova5
21.08.2011, 01:56
TeedI, я работаю с рич боксами) а не с файлами)
и мне нужно чтобы в каждом потоке отправлялось на разный сервер тоесть 4 сервера 4 потока) я вон то зделал но полный бред получился)

TeedI
21.08.2011, 02:04
private void button1_Click(object sender, EventArgs e)
{
List<Thread> th = new List<Thread>();
Thread[] pp = new Thread[10];

for (i = 0; i < 10; i++)
{
pp[i] = new Thread(new ThreadStart(potoc));
th.Insert(i, pp[i]);
}
for (i = 0; i < 10; i++)
{ th[i].Start(); }
}

public int i;
List<string> str = new List<string>();
List<string> str2 = new List<string>();
public void Method()
{
for (i = 0; i < richTextBox1.Lines.Length; i++)
{
//читаем извлекаем id auth
//заносим id auth в list
str.Insert(i, id);
str2.Insert(i, auth);
}
}

public void potoc()
{
Method();
for (i = 0; i < richTextBox1.Lines.Length; i++)
{
String s1 = "method=getCityInfo&user=" + str[i] + "&city=10&key=" + str2[i] + "";
[Ссылки могут видеть только зарегистрированные и активированные пользователи] request = ([Ссылки могут видеть только зарегистрированные и активированные пользователи])WebRequest.Create("[Ссылки могут видеть только зарегистрированные и активированные пользователи]");
request.UserAgent = "Opera/9.80";
request.Method = "POST";
request.Proxy = new WebProxy(ip, port);
request.ContentType = "application/x-[Ссылки могут видеть только зарегистрированные и активированные пользователи]";
byte[] EncodedPostParams = Encoding.ASCII.GetBytes(s1);
request.ContentLength = EncodedPostParams.Length;
request.GetRequestStream().Write(EncodedPostParams , 0, EncodedPostParams.Length);
string html = new StreamReader(request.GetResponse().GetResponseStre am(), Encoding.UTF8).ReadToEnd();
}
}

.

vkvova5
21.08.2011, 02:14
исправил ошыбку но не хочет работать))) отстанавлюется отладка....
и вот это я не пойму к чему
List<string> str = new List<string>();
List<string> str2 = new List<string>();

TeedI
21.08.2011, 02:16
[Ссылки могут видеть только зарегистрированные и активированные пользователи] вот ошыбка
и вот это я не пойму к чему
List<string> str = new List<string>();
List<string> str2 = new List<string>();

Извлекаешь substring'ом id auth из richtextbox заносишь их в лист.
По поводу ошибки,она не в коде.