Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

работа с потоками


Страницы:   1 2 3

Ekate ©   (2007-08-03 11:32:00) 

Здравствуйте,уважаемые эксперты!
Снова обращаюсь за вашей помощью.
Я вызываю дочерний поток (далее поток_2) из потока(поток_1),который опять же является дочерним к основной программе.
Поток_2 имеет параметр,значение которого передается потоком_1.
Т.е. конструктор потока_2 выглядит следующим образом:

constructor TBr.create(param: string; createsuspended: boolean);
begin
 inherited create(true);
 par := param;
 if not createsuspended then
 resume
end;


При чем, в зависимости от определенного условия поток_2 необходимо перезапускать с новым значением параметра.

Код перезапуска потока_2

//if process is runnig then terminate it
       if (br<>nil) then
       begin
           br.Terminate;
           br.WaitFor;
           br := nil;
       end;

       //and run it again with certain parameters
       br:=TBr.Create(anotherParam,true);
       br.Resume;
       br.Priority:=tpnormal;
       


Поток_2 представляет собой сканирование URL активного окна браузера и выполняет работу с тектовым файлом.

Основные процедуры потока_2

function GetUrl:string;
var Winds: IShellWindows;
   IEWB: IWebBrowser2;
   i: integer;
   Doc: IHtmlDocument2;
begin
 Winds:=CoShellWindows.Create;
 for i:=0 to Winds.Count-1 do
 if (Winds.Item(i) as IWEbBrowser2).Document<>nil then
 begin
   IEWB:=Winds.Item(i) as IWEbBrowser2;
   if IEWB.Document.QueryInterface(IhtmlDocument2, Doc)= S_OK
   then Result:=Doc.url;
 end;
end;

procedure TBr.Execute;
var
 f:textFile;
 s:string;
begin
CoInitialize(nil);
while not Terminated do begin
   s:=GetURL;
   if IfExists(param+'@'+s)=false then  // if record doesn't exist then append it to the file
   begin
     assignFile(f,'toy.txt');
     append(f);
     writeln(f,param+'@'+s);
     CloseFile(F);
   end ;

end;
 CoUnInitialize;
 exit;
end;


Собственно вопрос:
При работе приложения выскакивает следующая ошибка:
Project raised exception class EOleException with message 'Unspecified error'.

Ругается на строку

if (Winds.Item(i) as IWEbBrowser2).Document<>nil then...
в функции GetUrl

Если поток не останавливать и не перезапускать,то все работает.Но мне необходимо делать перезапуск при выполнении определнного условия.

Подскажите,в чем может быть ошибка.

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


Сергей М.   (2007-08-03 12:25:00) [41]


> активной в данный момент странички


И где происходит проверка на активность ?


Ekate   (2007-08-03 12:21:00) [42]

Спасибо за участие,

Сергей,
Не интересуют, мне необходимо знать только URL активной в данный момент странички


Сергей М.   (2007-08-03 12:16:00) [43]

Хм ..

Мне совершенно непонятна логика ф-ции GetURL.

Ф-ция всегда возвращает URL документа самого последнего (в списке интерфейса Winds) найденного экз-ра IE.

А остальные экз-ры что, не интересуют ?


Ekate   (2007-08-03 12:06:00) [44]

Запуск IE идет в потоке_1 до вызова потока_2.
Участок  кода  потока_1 следующий


//поток выполняется себе, но как только удовлетворяет условию, то
  if checking(sSnr) = false then
     begin
       ShellExecute(Handle,'open',Pchar(' http://localhost/static/userlogin.php?param1='+sSnr),nil,nil, SW_SHOWNORMAL);
   
        //if process is runnig then terminate it
        if (br<>nil) then
        begin
           br.Terminate;
           br.WaitFor;
           br := nil;
        end;

        //and run it again with certain parameters
        br:=TBr.Create(sSnr,true);
        br.Resume;
        br.Priority:=tpnormal;
       
     end;


Сергей М.   (2007-08-03 12:02:00) [45]


> теперь вообще потоки не запускают IE


А где твои потоки запускали IE доэтого ?

Что-то не вижу никаких запусков ..


Ekate   (2007-08-03 11:58:00) [46]

Нет, это не решило проблему. Более того, теперь вообще потоки не запускают IE  и не хотят с ним работать


Игорь Шевченко   (2007-08-03 11:53:00) [47]


> Undeclared identifier: 'COINIT_MULTITHREADED'


uses ActiveX;


Ekate   (2007-08-03 11:51:00) [48]

Хм,почему то говорит

Undeclared identifier: 'COINIT_MULTITHREADED'


Игорь Шевченко   (2007-08-03 11:35:00) [49]

Попробуй CoInitFlags установить в COINIT_MULTITHREADED в самом начале проекта


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо