![]() |
|
|
Регистрация | << Правила форума >> | 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; ![]() |
#3
|
|||
|
|||
![]() А почему ты в "PayThread1.Execute;" используешь тот же цикл перебора элементов листвокса как и в "But_Pay_Button2Click(Sender: TObject);"
и ваще чета проца "But_Pay_Button2Click(Sender: TObject);" неполно выложенная....не могу понят....Наскока я понял те на каждый элемент листвокса нужен отдельный поток запускать........да? APPLICATION.TERMINATOR |
#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; APPLICATION.TERMINATOR |
#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; APPLICATION.TERMINATOR |
#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 и предназначанно для одновременного доступа потока к данным без ожидания завершения обработки предыдущих данных. Если я прав то можете пример показать, а то в сети натыкаюсь на китайцев и гугл их не переводит, а китайский учить всё равно что до китая из России пешком идти
![]() |