Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

brcontainer

Multi processos (Threads)

Recommended Posts

Qual a melhor maneira de prevenir que uma janela trave (congele) as outras?

 

 

 

 

Eu tentei mover o QMainWindow para um QThread (QMainWindow::moveToThread), mas isso não é possível mover o QWidgets.

 

O motivo disso é que eu preciso separar os QWebPage/QWebView em processos/Threads diferentes para evitar que um script em uma página congele todas as janelas (por exemplo um javascript com loop infinito), no caso só travaria a janela com a página que está o script as demais janelas continuariam normalmente.

 

Como eu posso fazer isso?

 

class myWebPage : public QWebPage {
    QWebPage * createWindow(QWebPage::WebWindowType type) {
        Q_UNUSED(type);
        QMainWindow *wx = new mBROWSERQT(NULL,true);
        QWebView *wv = wx->findChild<QWebView*>("mybrowsertest");


        wx->showNormal();
        return wv->page();
    }
};

...

ui->mybrowsertest->setPage(new myWebPage());

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já tentou usar o QtConcurrent?

 

http://www.codeprogress.com/cpp/libraries/qt/QTConcurrentAvoidGUIFreezing.php#.UZWY8LW1GSo

http://doc.qt.digia.com/qq/qq27-responsive-guis.html

 

Starting with Qt 4.4, there are extensions available to let us do parallel programming: these are provided by QThreadPool and Qt Concurrent.

 

O estranho é que existe um post de 2010 no qual diz-se p/ usar o moveToThread p/ a QThread: http://blog.qt.digia.com/blog/2010/06/17/youre-doing-it-wrong/

 

E a réplica desse post: http://woboq.com/blog/qthread-you-were-not-doing-so-wrong.html

Compartilhar este post


Link para o post
Compartilhar em outros sites

@_Isis_ Obrigado pela rápida resposta.

 

Aparentemente QFuture::run foi o que funcionou melhor, mas eu ainda estou com uma dificuldade. Ao passar o QWebpage para o createWindow, as outras janelas ainda podem travar.

 

Eu gostaria de saber se tem como reimplementar o QWebpage::createWindow (ou QWebView::createWindow) com QFuture?

 

 

 

Nota: Não precisa ser exatamente a janela que tem que rodar em outro "processo", seria apenas o QWebPage/QWebFrame

 

 

Grato mais uma vez.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela rápida resposta

 

Olha, não sei se tem um jeito "limpo" de fazer isso.

 

 

infelizmente mover QWidgets não é possivel, eu queria algo equivalente, não necessáriamente isso.

 

 

 

 

Aqui está falando de "download da página" não de "execução".

 

 

 

Infelizmente nenhum destes links me foi útil, pois não se tratam exatamente do meu problema.

 

Grato mesmo assim. Se tiver alguma ideia eu ficaria agradecido. Vou tentando aqui fazer alguns testes.

 

No momento eu desativei o QWebPage::createWindow e estou tentando usar somente QWebPage::acceptNavigationRequest com QFuture::run, o problema será compartilhar os target= e window.oppener, já que estarão em processos diferentes (não criados pelos QWebPage::createWindow)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.