Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> поток, Delph/Browser 
:(
    Опции темы
Ekate
Дата 28.7.2007, 09:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 6.7.2007

Репутация: нет
Всего: нет



Добрый день,уважаемые эксперты

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


Основное приложение
Код

unit Unit1;

interface

uses
  ...Unit2,ddeman;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private

     co:TBr;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
      co:=TBr.Create(true);
      co.Resume;
      co.Priority:=tpnormal;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
     co.Terminate;
end;

end.
 
Поток
Код

unit Unit2;

interface

uses
  SysUtils,Classes,Controls,StdCtrls,ddeman;

type
  TBr = class(TThread)
  private
    { Private declarations }
  protected
   tr:string;
    procedure Execute; override;
    procedure Up;

  end;

implementation

uses Unit1;

{ TBr }

function Get_URL(Servicio: string): String;
var
   Cliente_DDE: TDDEClientConv;
   temp:PChar;
begin
    Result := '';
    Cliente_DDE:= TDDEClientConv.Create( nil );
     with Cliente_DDE do
        begin
           SetLink( Servicio,'WWW_GetWindowInfo');
           temp := RequestData('0xFFFFFFFF');
           Result := StrPas(temp);
           StrDispose(temp);
           CloseLink;
        end;
      Cliente_DDE.Free;
end;

function IfExists(s:string):boolean;
var
f:textFile;
i:integer;
r:string;
begin
  i:=1;
   AssignFile(f,'toy.txt');
   Reset(f);
   while not eof(f) do
   begin
    Readln(f,r);
    if (CompareStr(r,s)=0) then i:=i*0 else i:=i*1;
   end;
   CloseFile(f);
   if i=1 then result:=false else result:=true;

end;

procedure TBr.Execute;
var
  F:textFile;
  s:string;
  a:boolean;
begin
while not Terminated do begin
  s:=Get_URL('firefox');
     if IfExists(s)=false then
     begin
      assignFile(F,'toy.txt');
      append(f);
      writeln(f,s);
      tr:=s;
      Synchronize(Up);
     end ;

end;
CloseFile(F);
exit;

end;

procedure TBr.Up;
begin
  Form1.Label1.Caption := tr;
end;

end.


Всего наилучшего,
Ekate

PM MAIL   Вверх
MetalFan
Дата 28.7.2007, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 16
Всего: 128



мм.. а в чом собственно вопрос то? код не работает или где?


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Ekate
Дата 28.7.2007, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 6.7.2007

Репутация: нет
Всего: нет



Да, не работает,не знаю где может быть ошибка
PM MAIL   Вверх
_hunter
Дата 30.7.2007, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 9
Всего: 98



для локализации ошибки сначала сделай все это без потока. если все будет работать нормально -- тогда можно переходить на поток...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Ekate
Дата 30.7.2007, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 6.7.2007

Репутация: нет
Всего: нет



Все сначала и было реализовано без потока,все работант отлично.
Тут вот подсказали,что т.к. это DDE , то необходма петля сообщений...тут меня и застопорило, подскажите, пожалуйста... smile 
PM MAIL   Вверх
Domoffou
Дата 7.7.2008, 23:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 60
Регистрация: 22.6.2008
Где: Северная Венеция

Репутация: нет
Всего: нет



up!
Вот полный код программы, думаю, что проблема также.
Тоже пытаюсь получить список сайтов, но посредством TimeSetEvent,
который, как я подозреваю, работает тоже в потоках:
Код

// определяем URL
function GetMyURL(Servicio: string): String;
var
Cliente_DDE: TDDEClientConv;
temp:PChar; //<<-------------------------This is new
begin
Result := '';
Cliente_DDE:= TDDEClientConv.Create( nil );
with Cliente_DDE do
begin
SetLink( Servicio,'WWW_GetWindowInfo');
temp := RequestData('0xFFFFFFFF');
Result := StrPas(temp);
StrDispose(temp); //
CloseLink;
end;
Cliente_DDE.Free;
end;

procedure TimeCallBack(TimerID, Msg: Uint; dwUser, dw1, dw2: DWORD); pascal;
 begin
  Form1.Caption := GetMyURL('firefox');
 end;

// запускаем таймер
procedure TForm1.Button1Click(Sender: TObject);
var
  url: string;
begin
mmResult := TimeSetEvent(2000, 0, @TimeCallBack, 0, TIME_PERIODIC);
end;

// останавливаем таймер
procedure TForm1.Button2Click(Sender: TObject);
begin
TimeKillEvent(mmResult);
end;

// запускаем процедуру без потоков и таймеров
procedure TForm1.Button3Click(Sender: TObject);
begin
Form1.Caption := GetMyURL('Firefox');
end;


Как видите, все работает без таймера, и, соответственно, с таймером не работает :(
Если кто-то подскажет, буду благодарен!
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0469 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.