Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.12.2014, 21:34   #1
Айдар
Форумчанин
 
Регистрация: 20.06.2009
Сообщений: 195
По умолчанию Не работает таймер и оптимизация кода

Здравствуйте, помогите оптимизировать код.

Алгоритм.
1 Авторизация (запилил в FormCreate)
2. Получаем список
3. Добавляем
4 Удаляем

Код:

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

var
  Form1: TForm1;
   enter:tstringlist;
   cod,idtask:string;
   s:integer;


implementation

{$R *.dfm}

function Pars (T_, ForS, _T: string): string;
var
 a, b: integer;
begin
 Result := '';
 if (T_ = '') or (ForS = '') or (_T = '') then
 Exit;
 a := Pos (T_, ForS);
 if a = 0 then
 Exit
 else
 a := a + Length (T_);
 ForS := Copy (ForS, a, Length (ForS) - a + 1);
 b := Pos (_T, ForS);
 if b > 0 then
 Result := Copy (ForS, 1, b - 1);
end;




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


procedure TForm1.Button1Click(Sender: TObject);
begin
TNewThread.create(false);
end;


procedure TNewThread.Execute;
var
i:integer;
idsid:string;
begin

//фильтрация списка в 50 заказов
enter.Add('search_words=');
enter.Add('onPage=50');
enter.Add('sort=date');
enter.Add('order=desc');
enter.Add('filter=8');
enter.Add('date=0');
enter.Add('level=-2');
enter.Add('status=0');
enter.Add('price_from=');
enter.Add('price_to=');
enter.Add('size_from=');
enter.Add('size_to=');
enter.Add('folder=0');
enter.Add('deadline_from=');
enter.Add('deadline_to=');
enter.Add('autorate=');
enter.Add('search=1');
enter.Add('name_search_filter=');
cod:=form1.IdHTTP1.Post('ххх',enter);
enter.Clear;
idsid:= pars ('chat.php?sid=',cod,''+#39);

//form1.timer1.Interval:=36000;
//form1.Timer1.Enabled:=true;

//получаем список заказов, по идеи все что ниже должны выполняться с интервалом в 5 минут, но у меня таймер не срабатывал

form1.Memo2.Lines.Clear;
while  pos ('Перейти на комментарии">Комментарии и заявки</a> (0)',cod)>0 do
begin
idtask:= Copy(cod, pos ('Перейти на комментарии">Комментарии и заявки</a> (0)',cod)-43, 7);
form1.Memo2.Lines.Add(idtask);
delete (cod,pos ('Перейти на комментарии">Комментарии и заявки</a> (0)',cod),10);
end;


//тут копируем и удаляем заказы

enter.Add('deadline=02.12.2014');
enter.Add('timeline=10:00');
for I := 0 to form1.memo2.Lines.Count-1 do
begin
form1.IdHTTP1.Post('ххх'+form1.memo2.Lines[i], enter);
form1.IdHTTP1.get('ххх'+form1.memo2.Lines[i]);
end;
end;






procedure TForm1.FormCreate(Sender: TObject);
begin

enter:=tstringlist.create;
enter.Add('login=');
enter.Add('x=26');
enter.Add('y=30');
enter.Add('password=');
cod:=form1.IdHTTP1.Post('ххх',enter);
enter.Clear;
if pos ('ххх',cod)>0 then
label1.caption:='Вошли' else
exit;
cod:='';
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
i:integer;
begin
form1.Memo2.Lines.Clear;
while  pos ('Перейти на комментарии">Комментарии и заявки</a> (0)',cod)>0 do
begin
idtask:= Copy(cod, pos ('Перейти на комментарии">Комментарии и заявки</a> (0)',cod)-43, 7);
form1.Memo2.Lines.Add(idtask);
delete (cod,pos ('Перейти на комментарии">Комментарии и заявки</a> (0)',cod),10);
end;


enter.Add('deadline=02.12.2014');
enter.Add('timeline=10:00');
for I := 0 to form1.memo2.Lines.Count-1 do
begin
form1.IdHTTP1.Post('ххх'+form1.memo2.Lines[i], enter);
form1.IdHTTP1.get('ххх'+form1.memo2.Lines[i]);
end;

end;

end.

memo заменю на tstringlist,

вот этот блок бы оптимизировать, тут идет парсинг справа на лево, сам не смог(
Код:
while  pos ('Перейти на комментарии">Комментарии и заявки</a> (0)',cod)>0 do
begin
idtask:= Copy(cod, pos ('Перейти на комментарии">Комментарии и заявки</a> (0)',cod)-43, 7);
form1.Memo2.Lines.Add(idtask);
delete (cod,pos ('Перейти на комментарии">Комментарии и заявки</a> (0)',cod),10);
end;
и самое главное, таймер не срабатывает
Айдар вне форума Ответить с цитированием
Старый 01.12.2014, 21:40   #2
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,547
По умолчанию

Как минимум, pos 3 раза от одного и того же вычислять крайне не рационально. В переменную результат сохраняй и с ней работай.
Arigato вне форума Ответить с цитированием
Старый 01.12.2014, 21:55   #3
Айдар
Форумчанин
 
Регистрация: 20.06.2009
Сообщений: 195
По умолчанию

Цитата:
Сообщение от Arigato Посмотреть сообщение
Как минимум, pos 3 раза от одного и того же вычислять крайне не рационально. В переменную результат сохраняй и с ней работай.
а не подскажите, почему у меня таймер не срабатывает?
Айдар вне форума Ответить с цитированием
Старый 01.12.2014, 22:55   #4
Halogen
Пользователь
 
Аватар для Halogen
 
Регистрация: 23.11.2013
Сообщений: 46
По умолчанию

Цитата:
Сообщение от Айдар Посмотреть сообщение
а не подскажите, почему у меня таймер не срабатывает?
Имхо жми F7 в компиляторе, сам увидишь
Halogen вне форума Ответить с цитированием
Старый 02.12.2014, 10:49   #5
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Цитата:
а не подскажите, почему у меня таймер не срабатывает?
Потому что мат. часть по синхронизации не выучена. Нельзя обращаться к компонентам и классам и другим формам из потока, без синхронизации.

Таймер не работает потому что поток к моменту срабатывания уже умер, либо в cod передан мусор. Все.
Человек_Борща вне форума Ответить с цитированием
Старый 02.12.2014, 19:43   #6
Айдар
Форумчанин
 
Регистрация: 20.06.2009
Сообщений: 195
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
Потому что мат. часть по синхронизации не выучена. Нельзя обращаться к компонентам и классам и другим формам из потока, без синхронизации.

Таймер не работает потому что поток к моменту срабатывания уже умер, либо в cod передан мусор. Все.
в cod мусора нету, вот с синхронизацией не сильно знаком, подсказать на моем примере можете?
Айдар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Оптимизация кода на C# FiloXSee Общие вопросы .NET 4 24.09.2011 17:10
Оптимизация кода в си dampirik Помощь студентам 4 07.07.2009 11:30
Оптимизация кода viscas PHP 3 31.05.2009 16:04
Оптимизация кода Terran Общие вопросы Delphi 6 01.11.2008 16:57
Оптимизация кода. MAKTECYMA Общие вопросы C/C++ 2 05.06.2008 16:48