Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Еще раз о Многопоточности (https://forum.antichat.xyz/showthread.php?t=210683)

akimov_aleks 10.06.2010 22:27

Еще раз о Многопоточности
 
Перечетал кучу инфы по Многопоточности.
возникли вопросы. подскажите если не затруднит.
допустим мне надо сделать GEt запрос тапа
Код:

IdHTTP1.Get('http://'+Form1.Edit1.Text+'/index.php?id=1');
IdHTTP1.Get('http://'+Form1.Edit1.Text+'/index.php?id=2');
IdHTTP1.Get('http://'+Form1.Edit1.Text+'/index.php?id=n');

с одним потоком я разабрался как это сделать. а вот как в 10 не могу понять
как первому потоку дать id=1 итд
и второй вопрос как проверять если поток остоновился tuk снова запустить

M_script_ 10.06.2010 22:42

Цитата:

Сообщение от akimov_aleks
как первому потоку дать id=1 итд
и второй вопрос как проверять если поток остоновился tuk снова запустить

1) почитай про синхронизацию потоков
2) зачем его запускать, если он остановился? сделай так, чтобы он не останавливался, пока это не будет нужно.

akimov_aleks 10.06.2010 23:27

Цитата:

Сообщение от M_script_
1) почитай про синхронизацию потоков
2) зачем его запускать, если он остановился? сделай так, чтобы он не останавливался, пока это не будет нужно.

читал написано очень запутоно... зачем пишут книжки в 100 страниц когда нужна всего лишь 1 страничка.
если есть укого нибуть примерчик как сделть поделитесь

M_script_ 11.06.2010 00:10

Цитата:

Сообщение от akimov_aleks
читал написано очень запутоно... зачем пишут книжки в 100 страниц когда нужна всего лишь 1 страничка.
если есть укого нибуть примерчик как сделть поделитесь

Если 100 страниц читать лень про различные методы синхронизации, прочитай только о критических секциях, тебе хватит.
Если делфи или билдер, можешь использовать класс TThread с его Synchronize

Gar|k 11.06.2010 00:13

рихтера почитай... хотя...
вообще при создании потока функции потока можно передать указатель переменную например в твоем случае целое число.

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

akimov_aleks 11.06.2010 00:23

Цитата:

Сообщение от M_script_
Если 100 страниц читать лень про различные методы синхронизации, прочитай только о критических секциях, тебе хватит.
Если делфи или билдер, можешь использовать класс TThread с его Synchronize

может поможешь разобраться

начнем
Код:

TNewThread = class(TThread)    private    protected      procedure Execute; override;    public      constructor Create(CreateSuspended: Boolean);  end;
Код:

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;

Код:

procedure TForm1.Button2Click(Sender: TObject);  begin  TNewThread.Create(false);  end;
что то вроде так...
и как его синхронизоватьь....

M_script_ 11.06.2010 00:30

Во-первых, нужно создавать объект TIdHTTP в потоке, а не кидать на форму, иначе смысла в многопоточности нет.
Во-вторых - гугл.ком -> "делфи Synchronize"


Время: 09:48