ForumFree

Dipendenza tra processi

« Older   Newer »
  Share  
intoinside
view post Posted on 2/3/2010, 16:50




Ciao
sto realizzando un'applicazione con diverse funzionalità che contiene uno shellbrowser multitab. Per esigenze di progetto, l'applicazione si compone di un processo principale e da tanti processi secondari browser che contengono soltanto un'istanza del controllo TWebbrowser. Questa configurazione mi consente di mantenere diverse sessioni aperte in contemporanea sullo stesso servizio (ad es. più di una casella di posta GMail aperta).
La creazione delle istanze avviene sfruttando una versione modificata di un sorgente che ho trovato in un tuo articolo su questo sito.
Il legame il processo principale ed i browser viene creato dal browser stesso con questo codice:

CODICE
procedure TBrowser.CreateParams(var params: TCreateParams);
var
 lParent: HWnd;
begin
 inherited;

 lParent := FindWindow(<nome_classe_processo_principale>, <titolo_finestra_processo_principale>);
 if lParent<>0 then
   params.WndParent := lParent;
end;


Il legame si crea con successo ma si verifica fondamentalmente un grosso inconveniente: due vantaggi di questa architettura sono la possibilità di eseguire più servizi assieme e l'indipendenza di funzionamento (come su Chrome, se un tab va in crash non influisce sul resto dell'applicazione).
Utilizzando l'applicazione, si nota però che se almeno un processo browser è in difficoltà (semplicemente sta facendo il rendering della pagina o sta facendo delle elaborazioni javascript) rallenta tutto fino a causare il classico "hang" dell'applicazione principale.
Togliendo la procedura che ti ho scritto sopra, tutti i processi sono completamente indipendenti e la navigazione è perfettamente fluida ma si creano molti problemi riguardo alla gestione delle finestre (repaint e sovrapposizioni errate, problemi di focus ecc.).
Ho provato varie configurazioni dei flag degli stili finestra dei vari processi senza avere miglioramenti. E' già da un pò che sto cercando una soluzione senza successo. Ho cercato di capire cosa fa il browser Maxthon (che si basa su InternetExplorer ma "incapsula" ogni tab in un thread) ma i sorgenti non sono disponibili. Non posso sfruttare le potenzialità di IE8 perchè non sono sicuro di trovarlo sul pc dell'utente finale.

Non ti chiedo una soluzione al problema ma se riesci almeno a darmi qualche idea sulla via da seguire per cercare la soluzione te ne sarei eternamente grato!

Sarebbe ipotizzabile una soluzione tipo Maxthon di incapsulare ogni TWebbrowser in un thread? Hai qualche spunto su come si può realizzare?

Grazie. Ciao
 
Top
0 replies since 2/3/2010, 16:50   89 views
  Share