Еще раз о Многопоточности

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by akimov_aleks, 10 Jun 2010.

  1. akimov_aleks

    akimov_aleks New Member

    Joined:
    3 May 2009
    Messages:
    39
    Likes Received:
    1
    Reputations:
    0
    Перечетал кучу инфы по Многопоточности.
    возникли вопросы. подскажите если не затруднит.
    допустим мне надо сделать GEt запрос тапа
    Code:
    IdHTTP1.Get('http://'+Form1.Edit1.Text+'/index.php?id=[B]1[/B]');
    IdHTTP1.Get('http://'+Form1.Edit1.Text+'/index.php?id=[B]2[/B]');
    IdHTTP1.Get('http://'+Form1.Edit1.Text+'/index.php?id=[B]n[/B]');
    с одним потоком я разабрался как это сделать. а вот как в 10 не могу понять
    как первому потоку дать id=1 итд
    и второй вопрос как проверять если поток остоновился tuk снова запустить
     
  2. Meecript_

    Meecript_ Banned

    Joined:
    29 Oct 2008
    Messages:
    194
    Likes Received:
    62
    Reputations:
    32
    1) почитай про синхронизацию потоков
    2) зачем его запускать, если он остановился? сделай так, чтобы он не останавливался, пока это не будет нужно.
     
  3. akimov_aleks

    akimov_aleks New Member

    Joined:
    3 May 2009
    Messages:
    39
    Likes Received:
    1
    Reputations:
    0
    читал написано очень запутоно... зачем пишут книжки в 100 страниц когда нужна всего лишь 1 страничка.
    если есть укого нибуть примерчик как сделть поделитесь
     
  4. Meecript_

    Meecript_ Banned

    Joined:
    29 Oct 2008
    Messages:
    194
    Likes Received:
    62
    Reputations:
    32
    Если 100 страниц читать лень про различные методы синхронизации, прочитай только о критических секциях, тебе хватит.
    Если делфи или билдер, можешь использовать класс TThread с его Synchronize
     
    1 person likes this.
  5. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    рихтера почитай... хотя...
    вообще при создании потока функции потока можно передать указатель переменную например в твоем случае целое число.

    2 нафига его перезапускать сделай бесконечный цикл
    а нужность не нужность зафигачь через event-ы
    если не хочешь заморачиваться сделай массив числовой типа fEnable[10];
    и в функции протока проверяй в цикле бесконечном if(fEnable[id]==0) break;
     
    _________________________
  6. akimov_aleks

    akimov_aleks New Member

    Joined:
    3 May 2009
    Messages:
    39
    Likes Received:
    1
    Reputations:
    0
    может поможешь разобраться

    начнем
    Code:
    TNewThread = class(TThread)    private    protected      procedure Execute; override;    public      constructor Create(CreateSuspended: Boolean);  end;
    Code:
    constructor TNewThread.Create(CreateSuspended: Boolean);  begin    inherited Create(CreateSuspended);  end;    procedure TNewThread.Execute;  
    var  params, r, p, responseres : tstringlist;  i,a,b:integer;  n,s,user,user2:string;  
    begin
    for i:=1 to b do 
     begin
     IdHTTP1.Get('http://'+Form1.Edit1.Text+'/index.php?id='+i);
     i:=i+1;
     end;
    end;
    
    Code:
    procedure TForm1.Button2Click(Sender: TObject);  begin   TNewThread.Create(false);  end;
    что то вроде так...
    и как его синхронизоватьь....
     
  7. Meecript_

    Meecript_ Banned

    Joined:
    29 Oct 2008
    Messages:
    194
    Likes Received:
    62
    Reputations:
    32
    Во-первых, нужно создавать объект TIdHTTP в потоке, а не кидать на форму, иначе смысла в многопоточности нет.
    Во-вторых - гугл.ком -> "делфи Synchronize"
     
    1 person likes this.