![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
не могу сообразить, в listview есть данные, при нажатие на кнопку поток начинает работать с начала с первой строкой, а потом со второй, а мне нужно что бы он со всеми сразу работал, код вот:
Код:
procedure TForm1.But_Pay_Button2Click(Sender: TObject);
var
s : integer; // счетчик цикло
URL_Pay : String; // Список сайтов
begin
for s:=0 to Listview1.Items.count-1 do
URL_Pay := '' + Listview1.Items[0].SubItems[0];
Pay:=PayThread1.Create;Код:
constructor PayThread1.Create;
begin
Create(True);
FreeOnTerminate := True;
OnTerminate := ThreadExit;
Priority := tpNormal;
Resume;
end;
procedure PayThread1.ThreadExit(Sender: TObject);
begin
Dec(alive);
end;
procedure PayThread1.Execute;
var
IdHTTP1_Pay:TIdHTTP;
i : integer; // счетчик цикло
s:TStringStream;
URL_Pay:String;
begin
for i:=0 to Form2.Listview1.Items.count-1 do
begin
URL_Pay := '' + Form2.Listview1.Items[i].SubItems[0];
idHTTP1_Pay := TidHTTP.Create(nil);
s:=TStringStream.Create;
begin
Form2.IdHTTP1_Pay.get('' + URL_Pay + 'login.php?r=',s);
end; |
|
#2
|
|||
|
|||
|
пробывал переделать так
Код:
procedure TForm1.But_Pay_Button2Click(Sender: TObject); var i : integer; URL_Pay : String; begin for i:=0 to Listview1.Items.count-1 do begin PayThread1.Create(false, Listview1.Items[i] end; , ругается на ошибку в listview1 |
|
#3
|
|||
|
|||
|
А почему ты в "PayThread1.Execute;" используешь тот же цикл перебора элементов листвокса как и в "But_Pay_Button2Click(Sender: TObject);"
и ваще чета проца "But_Pay_Button2Click(Sender: TObject);" неполно выложенная....не могу понят....Наскока я понял те на каждый элемент листвокса нужен отдельный поток запускать........да? |
|
#4
|
|||
|
|||
|
Почему не полная? Я её переделал под такую когда мне понадобилось для каждого элемента listview запускать свой поток, что бы не ждать пока она расправется с предыдущем, тоесть что бы не последовательность была, а параллельность
|
|
#5
|
|||
|
|||
|
В коде потока в разделе public объяви переменную URL_Pay и
Попробуй так: Код:
procedure TForm1.But_Pay_Button2Click(Sender: TObject);
var
s : integer; // счетчик цикло
begin
for s:=0 to Listview1.Items.count-1 do
begin
Pay:=PayThread1.Create;
Pay.URL_Pay := Listview1.Items[0].SubItems[0];
Pay.Execute;
end;А в потоке попробу так: Код:
.... public URL_Pay: string; ... constructor PayThread1.Create; begin Create(True); URL_Pay:= ''; FreeOnTerminate := True; OnTerminate := ThreadExit; Priority := tpNormal; Resume; end; procedure PayThread1.ThreadExit(Sender: TObject); begin Dec(alive); end; procedure PayThread1.Execute; var IdHTTP1_Pay:TIdHTTP; i : integer; // счетчик цикло s:TStringStream; begin if URL_Pay = '' then exit; idHTTP1_Pay := TidHTTP.Create(nil); s:=TStringStream.Create; begin IdHTTP1_Pay.get(URL_Pay + 'login.php?r=',s); end; |
|
#6
|
|||
|
|||
|
на Pay.Execute; ругается
![]() |
|
#7
|
|||
|
|||
|
Так чё не кто не подскажет почему на execute ругаться может и resume в даннам случае не подходит?
|
|
#8
|
|||
|
|||
|
А так:
Код:
procedure TForm1.But_Pay_Button2Click(Sender: TObject);
var
s : integer; // счетчик цикло
Pay: TPayThread1;
begin
for s:=0 to Listview1.Items.count-1 do
begin
Pay:=TPayThread1.Create;
Pay.URL_Pay := Listview1.Items[s].SubItems[0];
Pay.Suspend;
Pay.Resume;
end;Код:
.... public URL_Pay: string; ... constructor PayThread1.Create; begin Create(True); URL_Pay:= ''; FreeOnTerminate := True; OnTerminate := ThreadExit; Priority := tpNormal; end; procedure PayThread1.ThreadExit(Sender: TObject); begin Dec(alive); end; procedure PayThread1.Execute; var IdHTTP1_Pay:TIdHTTP; i : integer; // счетчик цикло s:TStringStream; begin if URL_Pay = '' then exit; idHTTP1_Pay := TidHTTP.Create(nil); s:=TStringStream.Create; IdHTTP1_Pay.get(URL_Pay + 'login.php?r=',s); end; |
|
#9
|
|||
|
|||
|
так работает, но всё равно последовательно
![]() Тоесть я как понял мне нада как то для каждой строки listview создать свой поток и чтобы он работал не зависимо от других, но как ума не приложу и гугл инфы не даёт Последний раз редактировалось bulldog, 05.09.2010 в 23:31. |
|
#10
|
|||
|
|||
|
Код:
procedure TForm1.But_Pay_Button2Click(Sender: TObject);
var
s : integer; // счетчик цикло
Pay: TPayThread1;
begin
for s:=0 to Listview1.Items.count-1 do
begin
Pay:=TPayThread1.Create(True);
Pay.FreeOnTerminate := True;
Pay.URL_Pay := Listview1.Items[s].SubItems[0];
Pay.Resume;
end;Код:
procedure PayThread1.Execute; var IdHTTP1_Pay:TIdHTTP; i : integer; // счетчик цикло s:TStringStream; begin if URL_Pay = '' then exit; idHTTP1_Pay := TidHTTP.Create(nil); s:=TStringStream.Create; Try IdHTTP1_Pay.get(URL_Pay + 'login.php?r=',s); Finally s.Free; idHTTP1_Pay.Free; End; end; |
|
#11
|
|||
|
|||
|
Так тоже последовательно выполняет, может тут как то можно через BeginThread просто ночью на него наткнулся и как в справке описанно что это обёртка вокруг TThread и предназначанно для одновременного доступа потока к данным без ожидания завершения обработки предыдущих данных. Если я прав то можете пример показать, а то в сети натыкаюсь на китайцев и гугл их не переводит, а китайский учить всё равно что до китая из России пешком идти
![]() |