Регистрация Главная Сообщество
Сообщения за день Справка Регистрация

Загрузка содержимого memo в поток.

-

Вопросы и ответы, обсуждения

- Ваши вопросы по Pascal/Delphi только в данном разделе

Ответ
 
Опции темы
Старый 18.11.2011, 11:25   #1
 Разведчик
Аватар для *Хalyava*
 
*Хalyava* на правильном пути
Регистрация: 16.10.2011
Сообщений: 9
Популярность: 92
Сказал(а) спасибо: 8
Поблагодарили 12 раз(а) в 8 сообщениях
 
По умолчанию Загрузка содержимого memo в поток.

Прошу помощи.

Мне нужно загрузить в поток содержимое memo так сказать.

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

дальше...

гет запрос на URl адрес и как дополнительный параметр при запросе одна из строк из memo. дальше вторая и т.д.


как это можно реализовать ?
  Ответить с цитированием
Старый 18.11.2011, 12:19   #2
 Разведчик
Аватар для uma1805
 
uma1805 скоро будет известенuma1805 скоро будет известенuma1805 скоро будет известенuma1805 скоро будет известен
Регистрация: 20.12.2010
Сообщений: 20
Популярность: 399
Сказал(а) спасибо: 2
Поблагодарили 231 раз(а) в 23 сообщениях
 
По умолчанию Re: Загрузка содержимого memo в поток.

Ну чот типа такого )
Код:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,IdHttp,SyncObjs;

type
  TForm2 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    Edit1: TEdit;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  Thr = class(TThread)
  private
  protected
  procedure Execute; override;
  public
  constructor Create(CreateSuspended: Boolean);
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}
  var
 Thread, Acc:integer;
 CrS:TcriticalSection;
 Work:boolean;
 SList:Tstringlist;

constructor Thr.Create(CreateSuspended: Boolean);
begin
  inherited Create(CreateSuspended);
end;

procedure Thr.Execute;
 var
url,result:string;
CAcc:integer;
HTTP:TIdHTTP;
id:string;
begin
while Work do
  begin
   CrS.Enter;
   Inc(Acc);
   if Acc<SList.Count then CAcc:=Acc else Work:=false;
   CrS.Leave;
if Work then
begin
id:=SList[CAcc];
url:='http://site.com/?id='+id;
HTTP:=TIdHTTP.create;
result:=Http.get(url);
HTTP.Free;
end;
end;
end;

procedure TForm2.Button1Click(Sender: TObject);
var
i:integer;
begin
SList.Clear;
for I := 0 to Memo1.lines.Count - 1 do
SList.Add(Memo1.Lines[i]);
Acc:=-1;
Work:=true;
for Thread:=1  to strtoint(Edit1.Text) do
Thr.Create(false);
Thread:=strtoint(Edit1.Text);
end;

procedure TForm2.FormCreate(Sender: TObject);
begin
SList:=Tstringlist.create;
CrS:=TcriticalSection.create;
end;

end.
[Ссылки могут видеть только зарегистрированные пользователи. ]

Последний раз редактировалось uma1805; 18.11.2011 в 12:22.
  Ответить с цитированием
Старый 18.11.2011, 15:53   #3
 Разведчик
Аватар для R.A.Z.O.R
 
R.A.Z.O.R набедокурил в прошлом
Регистрация: 28.10.2011
Сообщений: 2
Популярность: -9
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Загрузка содержимого memo в поток.

Используй синхронизацию и записывай глобальную целую переменную
________________
Skype: uran-1997
  Ответить с цитированием
Старый 18.11.2011, 17:52   #4
 Разведчик
Аватар для *Хalyava*
 
*Хalyava* на правильном пути
Регистрация: 16.10.2011
Сообщений: 9
Популярность: 92
Сказал(а) спасибо: 8
Поблагодарили 12 раз(а) в 8 сообщениях
 
По умолчанию Re: Загрузка содержимого memo в поток.

Цитата:
Сообщение от uma1805Посмотреть сообщение
Ну чот типа такого )
Код:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,IdHttp,SyncObjs;

type
  TForm2 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    Edit1: TEdit;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  Thr = class(TThread)
  private
  protected
  procedure Execute; override;
  public
  constructor Create(CreateSuspended: Boolean);
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}
  var
 Thread, Acc:integer;
 CrS:TcriticalSection;
 Work:boolean;
 SList:Tstringlist;

constructor Thr.Create(CreateSuspended: Boolean);
begin
  inherited Create(CreateSuspended);
end;

procedure Thr.Execute;
 var
url,result:string;
CAcc:integer;
HTTP:TIdHTTP;
id:string;
begin
while Work do
  begin
   CrS.Enter;
   Inc(Acc);
   if Acc<SList.Count then CAcc:=Acc else Work:=false;
   CrS.Leave;
if Work then
begin
id:=SList[CAcc];
url:='http://site.com/?id='+id;
HTTP:=TIdHTTP.create;
result:=Http.get(url);
HTTP.Free;
end;
end;
end;

procedure TForm2.Button1Click(Sender: TObject);
var
i:integer;
begin
SList.Clear;
for I := 0 to Memo1.lines.Count - 1 do
SList.Add(Memo1.Lines[i]);
Acc:=-1;
Work:=true;
for Thread:=1  to strtoint(Edit1.Text) do
Thr.Create(false);
Thread:=strtoint(Edit1.Text);
end;

procedure TForm2.FormCreate(Sender: TObject);
begin
SList:=Tstringlist.create;
CrS:=TcriticalSection.create;
end;

end.
[Ссылки могут видеть только зарегистрированные пользователи. ]


при 1 потоке все нормально, как только ставлю 2 или более, выскакивает ошибка.
помогите ))

код:
Код:
procedure TNewThread.Execute;
 var
s1:string;
CAcc:integer;
HTTP:TIdHTTP;
id:string;
begin

while Work do
  begin
   CrS.Enter;
   Inc(Acc);
   if Acc<SList.Count then CAcc:=Acc else Work:=false;
   CrS.Leave;

   if Work then
begin
id:=SList[CAcc];



s1:=Form1.http.Get('http://сайт'+id);
      if Pos('"back"',s1)<>0 then
       begin
       Rez:=1;
       end
      else
       Rez:=-1;



synchronize(Sync);

end;
end;
end;
p.s. сама ошибка:
ProjecProject.exe raised exception class EAccessViolation with message 'Acess violation at adress 0040457C in module 'Project.exe'. Write of adress 00000018'. Process Stopped. Use Step or Run to continue.

Последний раз редактировалось *Хalyava*; 18.11.2011 в 18:34.
  Ответить с цитированием
Старый 04.12.2011, 19:23   #5
 Разведчик
Аватар для [M.G.] KoBaL
 
[M.G.] KoBaL неизвестен в этих краях
Регистрация: 04.12.2011
Сообщений: 2
Популярность: -55
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
 
Smile Re: Загрузка содержимого memo в поток.

Цитата:
Сообщение от *Хalyava*Посмотреть сообщение
при 1 потоке все нормально, как только ставлю 2 или более, выскакивает ошибка.
помогите ))

код:
Код:
procedure TNewThread.Execute;
 var
s1:string;
CAcc:integer;
HTTP:TIdHTTP;
id:string;
begin

while Work do
  begin
   CrS.Enter;
   Inc(Acc);
   if Acc<SList.Count then CAcc:=Acc else Work:=false;
   CrS.Leave;

   if Work then
begin
id:=SList[CAcc];



s1:=Form1.http.Get('http://сайт'+id);
      if Pos('"back"',s1)<>0 then
       begin
       Rez:=1;
       end
      else
       Rez:=-1;



synchronize(Sync);

end;
end;
end;
p.s. сама ошибка:
ProjecProject.exe raised exception class EAccessViolation with message 'Acess violation at adress 0040457C in module 'Project.exe'. Write of adress 00000018'. Process Stopped. Use Step or Run to continue.

Могу с нуля помочь кодом, а то твой хрен разберёшь.


1. Объяви глобальную переменную, например:

Код:
var
  Account_Now : Integer;
2. В потоке объяви локальную переменную, например:

Код:
var
  Temp_String : Integer;

3. В потоке сделай вот такой код

Код:
Critical_Section.Enter;

Account_Now := Account_Now + 1;

Temp_String := Memo1.Lines.Strings[Account_Now];

Critical_Section.Leave;
В результате в Temp_String будет занесен текст, который будет взять из строки равной номеру аккаунта [ Не забывай, что отсчёт идёт от нуля ]
________________
[Ссылки могут видеть только зарегистрированные пользователи. ]
  Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Помогите!] Вопросец о memo Федя Вопросы и ответы, обсуждения 2 22.08.2011 11:56
[Помогите!] Utf8ToAnsi в memo (При post запросе) Fliva59 Вопросы и ответы, обсуждения 13 15.07.2011 12:03
программа для просмотра содержимого аккаунта tpo9ljkee Garena 2 10.12.2010 15:34

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 17:20.

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net