Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Behind the Scenes
  3. Wiki Discussion
  4. Discussion about "Threads, Events and QObjects" article
QtWS25 Last Chance

Discussion about "Threads, Events and QObjects" article

Scheduled Pinned Locked Moved Wiki Discussion
59 Posts 17 Posters 44.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.
  • G Offline
    G Offline
    giesbert
    wrote on 14 Dec 2010, 19:52 last edited by
    #3

    bq. What do you mean? Right now there’s a simple example by an hypotetic recursion into a slot. Do you think I should stressing on it even more?

    I meant that it can not only fore recursion, it can also fore a stutdown or delete of an object, that you currently work on. Think of deleteLater, which is executed by the event loop. This can happen when you call @QApplication::processEvents@. And then, perhaps, an object, where yiou think it exists, is away. And I saw suxgh tghings, especially not recursions but unexpected object deletion which result in a crash. And then all you get is:
    bq. It crashes, I don't know why, but here the memory is freed.....

    And you are the happy person to find the bug, they introduced by spinning the event loop out of scope...

    So I would make a bigger note with many exclamation marks and warnings... :-))

    Nokia Certified Qt Specialist.
    Programming Is Like Sex: One mistake and you have to support it for the rest of your life. (Michael Sinz)

    1 Reply Last reply
    0
    • ? This user is from outside of this forum
      ? This user is from outside of this forum
      Guest
      wrote on 15 Dec 2010, 06:14 last edited by
      #4

      moving this to Wiki forum, thats the right place to initiate discussions on wiki articles

      1 Reply Last reply
      0
      • D Offline
        D Offline
        dangelog
        wrote on 15 Dec 2010, 10:27 last edited by
        #5

        [quote author="Gerolf Reinwardt" date="1292356379"]bq. What do you mean? Right now there’s a simple example by an hypotetic recursion into a slot. Do you think I should stressing on it even more?

        I meant that it can not only fore recursion, it can also fore a stutdown or delete of an object, that you currently work on. Think of deleteLater, which is executed by the event loop. This can happen when you call @QApplication::processEvents@. And then, perhaps, an object, where yiou think it exists, is away. And I saw suxgh tghings, especially not recursions but unexpected object deletion which result in a crash. And then all you get is:
        bq. It crashes, I don't know why, but here the memory is freed.....

        And you are the happy person to find the bug, they introduced by spinning the event loop out of scope...

        So I would make a bigger note with many exclamation marks and warnings... :-))[/quote]

        Ok, I got it now :-)

        Well, I've integrated your suggestions here and there. Give it a read if you want to :)

        [quote author="chetankjain" date="1292393650"]moving this to Wiki forum, thats the right place to initiate discussions on wiki articles[/quote]

        Ops! You're right, sorry about that.

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

        1 Reply Last reply
        0
        • G Offline
          G Offline
          giesbert
          wrote on 15 Dec 2010, 11:35 last edited by
          #6

          Hi,
          thanks again, the article is really good, and I think, the pitfalls are clearer now. So looking fporward to your next article :-))

          Nokia Certified Qt Specialist.
          Programming Is Like Sex: One mistake and you have to support it for the rest of your life. (Michael Sinz)

          1 Reply Last reply
          0
          • W Offline
            W Offline
            Wolf P.
            wrote on 20 Dec 2010, 11:46 last edited by
            #7

            bq. how to start, stop, join a thread under (at least) one major operating system;

            Is joining threads such a common pattern?
            I've always imagined threads as autonomous agents. This I was able to produce programmatically and at some point they were finished and forgotten. Whether or not the program code orphaned never seemed to matter to me.

            1 Reply Last reply
            0
            • G Offline
              G Offline
              giesbert
              wrote on 20 Dec 2010, 11:51 last edited by
              #8

              Joining threads is common, if you put parts of a bigger thing to threads to do that in paralell and want to wait for all results being finished. I know, it can also be done with QtConcurrent but some programs are older than QtConcurrent :-))

              Nokia Certified Qt Specialist.
              Programming Is Like Sex: One mistake and you have to support it for the rest of your life. (Michael Sinz)

              1 Reply Last reply
              0
              • D Offline
                D Offline
                dangelog
                wrote on 20 Dec 2010, 11:55 last edited by
                #9

                [quote author="Wolf P." date="1292845577"]bq. how to start, stop, join a thread under (at least) one major operating system;

                Is joining threads such a common pattern?
                I've always imagined threads as autonomous agents. This I was able to produce programmatically and at some point they were finished and forgotten. Whether or not the program code orphaned never seemed to matter to me.[/quote]

                It's a pattern, that's all. For instance, a possible use case is telling a worker thread to finish, then actually wait for it to end (by joining it), then deallocate some resources used by it.

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

                1 Reply Last reply
                0
                • W Offline
                  W Offline
                  Wolf P.
                  wrote on 20 Dec 2010, 12:11 last edited by
                  #10

                  Gerolf, I see. The somewhat outdated framework I worked with, provided only the forking.
                  Do you know a good real-world example?

                  Peppe, as I see, to join means simply to wait?

                  1 Reply Last reply
                  0
                  • G Offline
                    G Offline
                    giesbert
                    wrote on 20 Dec 2010, 12:18 last edited by
                    #11

                    Join means wait for finish, yes.
                    I have some in my work, but they are not open source :-)
                    removing objects, which are are internally multithreadded for example. You have to close all threads before removing the object.

                    Nokia Certified Qt Specialist.
                    Programming Is Like Sex: One mistake and you have to support it for the rest of your life. (Michael Sinz)

                    1 Reply Last reply
                    0
                    • D Offline
                      D Offline
                      dangelog
                      wrote on 20 Dec 2010, 12:23 last edited by
                      #12

                      [quote author="Wolf P." date="1292847084"]Gerolf, I see. The somewhat outdated framework I worked with, provided only the forking.
                      Do you know a good real-world example?

                      Peppe, as I see, to join means simply to wait?[/quote]

                      I was pretty sure it was standard lexicon when it comes to threading: it means "block the calling thread until the target thread terminates"; and yes, it's what QThread::wait() does. See for instance:
                      http://www.kernel.org/doc/man-pages/online/pages/man3/pthread_join.3.html
                      http://download.oracle.com/javase/6/docs/api/java/lang/Thread.html#join()
                      http://perldoc.perl.org/threads.html#DESCRIPTION

                      Now that you're telling me, perhaps should I change that term?

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

                      1 Reply Last reply
                      0
                      • G Offline
                        G Offline
                        goetz
                        wrote on 20 Dec 2010, 12:27 last edited by
                        #13

                        I must admit, I did not read the wiki article, but have some experience with QThread. The term "join a thread" was unknown to me, so although this might be a common term in threading in general, it seems it is not used in Qt world.

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

                        1 Reply Last reply
                        0
                        • G Offline
                          G Offline
                          giesbert
                          wrote on 20 Dec 2010, 12:31 last edited by
                          #14

                          It is common in Boost threadding for example, that's where I know it from. If it is a general term... ???

                          Nokia Certified Qt Specialist.
                          Programming Is Like Sex: One mistake and you have to support it for the rest of your life. (Michael Sinz)

                          1 Reply Last reply
                          0
                          • D Offline
                            D Offline
                            dangelog
                            wrote on 20 Dec 2010, 13:06 last edited by
                            #15

                            I can put a footnote and/or a link there, just in case. The point is that you should know what QThread::wait() is for. What do you think?

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

                            1 Reply Last reply
                            0
                            • G Offline
                              G Offline
                              goetz
                              wrote on 20 Dec 2010, 13:10 last edited by
                              #16

                              Knowledge about QThread::wait() is definitely needed.

                              maybe this wording is a bit more clear:

                              "how to start, stop, wait for a thread (aka join a thread in boost and others) under (at least) one major operating system"

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

                              1 Reply Last reply
                              0
                              • W Offline
                                W Offline
                                Wolf P.
                                wrote on 20 Dec 2010, 13:20 last edited by
                                #17

                                [quote author="Volker" date="1292850647"] "how to start, stop, wait for a thread [/quote]
                                This sounds very familiar to me (FYI: Win32/VCL).

                                1 Reply Last reply
                                0
                                • D Offline
                                  D Offline
                                  dangelog
                                  wrote on 20 Dec 2010, 13:33 last edited by
                                  #18

                                  Ok, I changed the sentence to
                                  [quote]
                                  how to start and stop a thread, and wait for it to finish, under (at least) one major operating system;
                                  [/quote]

                                  Thank you all for your feedback :)

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

                                  1 Reply Last reply
                                  0
                                  • W Offline
                                    W Offline
                                    Wolf P.
                                    wrote on 20 Dec 2010, 13:37 last edited by
                                    #19

                                    Another choice of terminology has me confused: reentrant. Thread-safe I understood, but the definition of reentrancy seemed not clearly demarcated from it. Maybe a slight reworking of the text could help for a better understanding of the difference.

                                    1 Reply Last reply
                                    0
                                    • W Offline
                                      W Offline
                                      Wolf P.
                                      wrote on 20 Dec 2010, 14:17 last edited by
                                      #20

                                      Sorry for this naive comment. Finally I found that this is Qt terminology: http://doc.qt.nokia.com/latest/threads-reentrancy.html

                                      1 Reply Last reply
                                      0
                                      • F Offline
                                        F Offline
                                        Franzk
                                        wrote on 20 Dec 2010, 15:17 last edited by
                                        #21

                                        It is not just Qt terminology. It's general programming terminology and something everyone who does at least the slightest bit of multi-threading should know about.

                                        http://en.wikipedia.org/wiki/Reentrant_(subroutine)
                                        http://en.wikipedia.org/wiki/Thread_safety

                                        "Horse sense is the thing a horse has which keeps it from betting on people." -- W.C. Fields

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

                                        1 Reply Last reply
                                        0
                                        • W Offline
                                          W Offline
                                          Wolf P.
                                          wrote on 20 Dec 2010, 15:53 last edited by
                                          #22

                                          [quote author="Franzk" date="1292858262"]...and something everyone who does at least the slightest bit of multi-threading should know about.[/quote] thx for the WP references :)

                                          BTW: I did some multithreaded coding without problems, and without thinking about reentrance.

                                          1 Reply Last reply
                                          0

                                          12/59

                                          20 Dec 2010, 12:23

                                          topic:navigator.unread, 47
                                          • Login

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