Просмотр полной версии : Еще раз о Многопоточности
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
как первому потоку дать id=1 итд
и второй вопрос как проверять если поток остоновился tuk снова запустить
1) почитай про синхронизацию потоков
2) зачем его запускать, если он остановился? сделай так, чтобы он не останавливался, пока это не будет нужно.
akimov_aleks
10.06.2010, 23:27
1) почитай про синхронизацию потоков
2) зачем его запускать, если он остановился? сделай так, чтобы он не останавливался, пока это не будет нужно.
читал написано очень запутоно... зачем пишут книжки в 100 страниц когда нужна всего лишь 1 страничка.
если есть укого нибуть примерчик как сделть поделитесь
M_script_
11.06.2010, 00:10
читал написано очень запутоно... зачем пишут книжки в 100 страниц когда нужна всего лишь 1 страничка.
если есть укого нибуть примерчик как сделть поделитесь
Если 100 страниц читать лень про различные методы синхронизации, прочитай только о критических секциях, тебе хватит.
Если делфи или билдер, можешь использовать класс TThread с его Synchronize
рихтера почитай... хотя...
вообще при создании потока функции потока можно передать указатель переменную например в твоем случае целое число.
2 нафига его перезапускать сделай бесконечный цикл
а нужность не нужность зафигачь через event-ы
если не хочешь заморачиваться сделай массив числовой типа fEnable[10];
и в функции протока проверяй в цикле бесконечном if(fEnable[id]==0) break;
akimov_aleks
11.06.2010, 00:23
Если 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"
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot