Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Qt WebKit
  4. QtWebkit multithreading
QtWS25 Last Chance

QtWebkit multithreading

Scheduled Pinned Locked Moved Qt WebKit
14 Posts 6 Posters 8.8k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • A Offline
    A Offline
    ananya
    wrote on last edited by
    #1

    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
    @

    1 Reply Last reply
    0
    • A Offline
      A Offline
      andre
      wrote on last edited by
      #2

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

      1 Reply Last reply
      0
      • D Offline
        D Offline
        dangelog
        wrote on last edited by
        #3

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

        Software Engineer
        KDAB (UK) Ltd., a KDAB Group company

        1 Reply Last reply
        0
        • A Offline
          A Offline
          ananya
          wrote on last edited by
          #4

          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();
          .....
          @

          1 Reply Last reply
          0
          • G Offline
            G Offline
            goetz
            wrote on last edited by
            #5

            [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.

            http://www.catb.org/~esr/faqs/smart-questions.html

            1 Reply Last reply
            0
            • A Offline
              A Offline
              ananya
              wrote on last edited by
              #6

              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);@

              1 Reply Last reply
              0
              • G Offline
                G Offline
                goetz
                wrote on last edited by
                #7

                [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.

                http://www.catb.org/~esr/faqs/smart-questions.html

                1 Reply Last reply
                0
                • A Offline
                  A Offline
                  ananya
                  wrote on last edited by
                  #8

                  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

                  1 Reply Last reply
                  0
                  • D Offline
                    D Offline
                    dangelog
                    wrote on last edited by
                    #9

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

                    Software Engineer
                    KDAB (UK) Ltd., a KDAB Group company

                    1 Reply Last reply
                    0
                    • G Offline
                      G Offline
                      goetz
                      wrote on last edited by
                      #10

                      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.

                      http://www.catb.org/~esr/faqs/smart-questions.html

                      1 Reply Last reply
                      0
                      • A Offline
                        A Offline
                        ananya
                        wrote on last edited by
                        #11

                        [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

                        1 Reply Last reply
                        0
                        • A Offline
                          A Offline
                          ananya
                          wrote on last edited by
                          #12

                          [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

                          1 Reply Last reply
                          0
                          • L Offline
                            L Offline
                            lgeyer
                            wrote on last edited by
                            #13

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

                            1 Reply Last reply
                            0
                            • A Offline
                              A Offline
                              anjna
                              wrote on last edited by
                              #14

                              "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

                              1 Reply Last reply
                              0

                              • Login

                              • Login or register to search.
                              • First post
                                Last post
                              0
                              • Categories
                              • Recent
                              • Tags
                              • Popular
                              • Users
                              • Groups
                              • Search
                              • Get Qt Extensions
                              • Unsolved