QtWebkit multithreading



  • I am working on a project to render text as images using QT-Jambi.

    The webkit renders the HTML and generates the image.
    While running the code with a single thread there are no issue
    but when I run the program using multiple threads(5-6) with each thread making multiple calls the getImage() the code crashes

    for each thread I am passing a new QWebPage and using QWebPgae.moveToThread().

    
    @    public void getImage(String str, int width, String fname,
       boolean istransparent) {
    
      
      QSize qSize = new QSize(width,height);
    
    
      page.setViewportSize(qSize);
      str = applyStyle(str);
    
      page.mainFrame().setHtml(str);
      String imageName = fname + "_" + width + "x"
        + page.mainFrame().contentsSize().height() + ".png";
    
      System.out.println("Creating Full Image : " + imageName);
      page.setViewportSize(page.mainFrame().contentsSize());
    
      
      QImage qImage = new QImage(page.mainFrame().contentsSize(),
        QImage.Format.Format_ARGB32);
      
    
      QPainter painter = new QPainter(qImage);
    
      page.mainFrame().render(painter);
      if (istransparent)
       makeTransparent(qImage);
    
      qImage.save(imageName);
      painter.end();
    
      
      qImage.dispose();
        
     }
    
    
    @
    

    @

    An unexpected error has been detected by Java Runtime Environment:

    SIGSEGV (0xb) at pc=0x03534417, pid=6123, tid=1902168976

    Java VM: OpenJDK Server VM (1.6.0-b09 mixed mode linux-x86)

    Problematic frame:

    C [libQtWebKit.so.4+0x567417]

    If you would like to submit a bug report, please visit:

    http://icedtea.classpath.org/bugzilla

    The crash happened outside the Java Virtual Machine in native code.

    See problematic frame for where to report the bug.

    @

    @"COMPLETE CORE DUMP AT":http://freetexthost.com/1dtmb03qup
    @



  • Please don't double-post. I have deleted the duplicate of this posting that you put in General and Desktop.



  • QtWebkit classes are GUI classes and as such they are meant to be used from the main thread only.



  • I am passing a new instance of QWebPage to each thread
    MyClass contains imageGenerator()

    @.....in main()...
    QWepPage page = new QWebPage();
    MyClass m = new MyClass();
    QThread thread = new QThread(m)

    page.moveToThread(thread);

    thread.start();
    .....
    @



  • [quote author="ananya" date="1314020743"]I am passing a new instance of QWebPage to each thread
    [/quote]

    I just can emphasize what peppe wrote:

    [quote author="peppe" date="1314019276"]QtWebkit classes are GUI classes and as such they are meant to be used from the main thread only.[/quote]

    So, you must not move the web page to another thread.



  • Is there any work around for this then? while still keeping it multi threaded?

    p.s.
    i've found that the part of code that is causing the crash is
    @page.mainFrame().setHtml(str);@



  • [quote author="ananya" date="1314022398"]Is there any work around for this then? while still keeping it multi threaded?[/quote]

    Sure, if you don't mind what you are trying to achieve, we can give advice.



  • I am trying to make an application to convert text to image ...one requirement is that i should be able to run multiple threads since i plan to integrate this with a web server



  • It's not possible with Qt. Can't you just run multiple processes?



  • All you can do is running multiple threads that collect the data (HTML pages) and send that to the QWebPage instances in the main thread.



  • [quote author="Volker" date="1314056869"]All you can do is running multiple threads that collect the data (HTML pages) and send that to the QWebPage instances in the main thread.[/quote]

    that wont really serve my purpose of generating images in parallel

    [quote author="peppe" date="1314023870"]It's not possible with Qt. Can't you just run multiple processes?[/quote]

    will try to run it as a process..and get back



  • [quote author="ananya" date="1314062413"]
    [quote author="Volker" date="1314056869"]All you can do is running multiple threads that collect the data (HTML pages) and send that to the QWebPage instances in the main thread.[/quote]

    that wont really serve my purpose of generating images in parallel

    [quote author="peppe" date="1314023870"]It's not possible with Qt. Can't you just run multiple processes?[/quote]

    will try to run it as a process..and get back
    [/quote]

    Suppose i use Callable instead of Runnable threads
    Is it possible to initialize a new QApplication within each callable's call...when i'm trying this only the first callable runs..the others crash



  • You can only have one Q(Core)Application instance. You might delete the instance and create a new but ... there can be only one!



  • "You can only have one Q(Core)Application instance. You might delete the instance and create a new but … there can be only one!"

    How to do this? please help


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.