Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. [SOLVED] Wait for timeout or some signal

[SOLVED] Wait for timeout or some signal

Scheduled Pinned Locked Moved General and Desktop
16 Posts 7 Posters 28.2k 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.
  • M Offline
    M Offline
    maxim.prishchepa
    wrote on last edited by
    #1

    Hi All!
    I need send some message by the local net, and than need wait to some answer or exit at the function by timeout,
    I try stop by forever loop, and there wait some signals, but no signal is comming (i think thats because i create this loop at the main thread), i want to try create wait loop and timeout timer not at the main threads, but i don't like this idea, some one can tall me easy way to resolve this problem?

    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
    • sierdzioS Offline
      sierdzioS Offline
      sierdzio
      Moderators
      wrote on last edited by
      #2

      @
      forever {
      doMyLogic();
      qApp->processEvents();
      }
      @

      (Z(:^

      1 Reply Last reply
      0
      • M Offline
        M Offline
        maxim.prishchepa
        wrote on last edited by
        #3

        WOW so easy? i'll try that :) thnx

        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
        • sierdzioS Offline
          sierdzioS Offline
          sierdzio
          Moderators
          wrote on last edited by
          #4

          Yeah, it forces the QCoreApplication instance to process events in the event queue, including signals and slots provided by MOC. This way, the loop does not block operation of the app.

          (Z(:^

          1 Reply Last reply
          0
          • M Offline
            M Offline
            maxim.prishchepa
            wrote on last edited by
            #5

            tnx, i note that!

            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
            • A Offline
              A Offline
              andre
              wrote on last edited by
              #6

              Or, look into "QxtSignalWaiter":http://libqxt.bitbucket.org/doc/0.6/qxtsignalwaiter.html from the libQxt library.

              1 Reply Last reply
              0
              • M Offline
                M Offline
                maxim.prishchepa
                wrote on last edited by
                #7

                tnx a lot!

                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
                • R Offline
                  R Offline
                  rich
                  wrote on last edited by
                  #8

                  Please don't use processEvents() like this, or your CPU usage will be terrible. Instead use QEventLoop.

                  1 Reply Last reply
                  0
                  • J Offline
                    J Offline
                    joonhwan
                    wrote on last edited by
                    #9

                    @rich,
                    Can hear more details of using processEvents() and QEventLoop story here?

                    joonhwan at gmail dot com

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

                      Calling processEvents() in a loop like proposed will keep your CPU 100% bussy, because you just keep polling the event queue. Using an eventloop is a smarter solution that doesn't waste CPU cycles like that, so it will not spike your CPU. It is also the solution implemented by the libQxt in QxtSignalWaiter.

                      1 Reply Last reply
                      0
                      • J Offline
                        J Offline
                        joonhwan
                        wrote on last edited by
                        #11

                        @Andre,
                        Thanks, feel like got good things to know and even another useful-looking library!

                        joonhwan at gmail dot com

                        1 Reply Last reply
                        0
                        • R Offline
                          R Offline
                          RomaHagen
                          wrote on last edited by
                          #12

                          QxtSignalWaiter is implemented with a help of processEvents, not eventLoop. See "here":http://dev.libqxt.org/libqxt/src/21ea5919eabb2a404eafdffcdb8383472ca66bdd/src/core/qxtsignalwaiter.cpp?at=master#cl-143.

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

                            [quote author="RomaHagen" date="1357227120"]QxtSignalWaiter is implemented with a help of processEvents, not eventLoop. See "here":http://dev.libqxt.org/libqxt/src/21ea5919eabb2a404eafdffcdb8383472ca66bdd/src/core/qxtsignalwaiter.cpp?at=master#cl-143. [/quote]

                            Hmmm... You're right. Surprising. Thanks for the correction.

                            Does anyone know why Qxt choose this implementation instead?

                            1 Reply Last reply
                            0
                            • R Offline
                              R Offline
                              RomaHagen
                              wrote on last edited by
                              #14

                              See "this":http://dev.libqxt.org/libqxt/src/21ea5919eabb2a404eafdffcdb8383472ca66bdd/src/core/qxtsignalwaiter.cpp?at=master#cl-143 and read the doc about WaitForMoreEvents "here":http://qt-project.org/doc/qt-4.8/qeventloop.html#ProcessEventsFlag-enum.

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

                                Yes, I know where to find the sources and I know the docs, but that was not my question. I sometimes use this idea:
                                @
                                QEventLoop loop;
                                connect(myObject, SIGNAL(theSignalToWaitFor()), &loop, SLOT(quit()));
                                connect(timeoutTimer, SIGNAL(timeout()), &loop, SLOT(quit()));
                                loop.exec(); //blocks untill either theSignalToWaitFor or timeout was fired
                                @

                                1 Reply Last reply
                                0
                                • M Offline
                                  M Offline
                                  Mar4eli
                                  wrote on last edited by
                                  #16

                                  [quote author="Andre" date="1357286986"]Yes, I know where to find the sources and I know the docs, but that was not my question. I sometimes use this idea:
                                  @
                                  QEventLoop loop;
                                  connect(myObject, SIGNAL(theSignalToWaitFor()), &loop, SLOT(quit()));
                                  connect(timeoutTimer, SIGNAL(timeout()), &loop, SLOT(quit()));
                                  loop.exec(); //blocks untill either theSignalToWaitFor or timeout was fired
                                  @

                                  [/quote]

                                  thank you. it's very useful.

                                  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