Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.01.2012, 22:49   #1
losbl9
 
Регистрация: 16.01.2012
Сообщений: 7
По умолчанию многопоточность

всем привет!
программа при выполнении одного потока работает нормально, но стоит только добавить еще один все перестает выдает ошибку.

Безымянный.jpg

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
  IdHTTP, syncobjs;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Edit1: TEdit;
    Button1: TButton;
    Memo2: TMemo;
    IdHTTP1: TIdHTTP;
    Edit2: TEdit;
    //procedure aut(poz:integer);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

 potok = class(TThread)
  private
    { Private declarations }
  protected
    procedure Execute; override;
  public
    constructor Create(CreateSuspended: Boolean);
  end;

var
  Form1: TForm1;
  kollin:integer;
  p:potok;
  work:boolean;
  cs:tcriticalsection;
  Page,log,pas:string;

implementation

{$R *.dfm}

constructor potok.Create(CreateSuspended: Boolean);
begin
  inherited Create(CreateSuspended);
end;

procedure potok.execute;
var cur,k,i:integer;
  q:string;
begin
  form1.IdHTTP1.Create;
  form1.IdHTTP1.AllowCookies:=true;
  form1.IdHTTP1.HandleRedirects:=true;
  cur:=0;
while work do
begin
  cs:=tcriticalsection.Create;
  if cur<form1.Memo1.Lines.count then
    k:=cur
  else
    work:=false;
  inc(cur);
  cs.Leave ;
  if work then
  begin
    log:='';
    pas:='';
    q:='';
    q:=form1.memo1.Lines[k];
    i:=pos(':',q);
    log:=copy(q,0,i-1);
    pas:=(copy(q,i+1,length(q)));

    try
      Page:=form1.IdHTTP1.Get('url'+log+'&pass='+pas);
    except
    end;
    if Pos('logout', Page)<>0 then
      form1.memo2.Lines.Add('Авторизация удалась')
    else
      form1.memo2.Lines.Add('Авторизация не удалась');
  end;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
work:=true;
for i:=0 to 5 do
p:=potok.Create(false);
end;

end.
помогити пожалуйта

Последний раз редактировалось losbl9; 16.01.2012 в 23:01.
losbl9 вне форума Ответить с цитированием
Старый 16.01.2012, 23:00   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Ознакомтесь с методом Synchronize потока, для чего он нужен и как его использовать
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 16.01.2012, 23:16   #3
losbl9
 
Регистрация: 16.01.2012
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Ознакомтесь с методом Synchronize потока, для чего он нужен и как его использовать
спасибо за помощь, все понял, работает
losbl9 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Многопоточность alex0097 Общие вопросы Delphi 3 05.05.2011 22:46
Многопоточность WennY Общие вопросы Delphi 11 23.04.2011 00:46
Многопоточность и с++ Koshmarovsky Visual C++ 13 06.09.2010 20:39
Многопоточность CrazyDude Общие вопросы Delphi 1 18.04.2010 19:00
Многопоточность JakSon Общие вопросы Delphi 10 27.12.2009 02:19