Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Mobile and Embedded
  4. Error on QtConcurrent::run
Forum Updated to NodeBB v4.3 + New Features

Error on QtConcurrent::run

Scheduled Pinned Locked Moved Solved Mobile and Embedded
15 Posts 4 Posters 2.7k Views 2 Watching
  • 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.
  • J.HilkJ J.Hilk

    @peter-70 is that a valid overload of run ? If I remember correctly the first paramter has to be a member function not an object.

    I may be wrong however.

    KroMignonK Offline
    KroMignonK Offline
    KroMignon
    wrote on last edited by
    #4

    @J.Hilk This usage is totally legal.

    For example, from Qt documentation => https://doc.qt.io/qt-5/qtconcurrentrun.html

    // call 'QList<QByteArray>  QByteArray::split(char sep) const' in a separate thread
    QByteArray bytearray = "hello world";
    QFuture<QList<QByteArray> > future = QtConcurrent::run(bytearray, &QByteArray::split, ',');
    ...
    QList<QByteArray> result = future.result();
    

    It is an old maxim of mine that when you have excluded the impossible, whatever remains, however improbable, must be the truth. (Sherlock Holmes)

    1 Reply Last reply
    1
    • P peter-70

      What is wrong with these code line:

      QtConcurrent::run(positionWidget, &PositionGroupbox::Select, false)
      

      positionWidget is a instance pointer of PositionGroupbox
      Select is public void with one bool parameter in the class PositionGroupbox

      The compiler shows me an error:

      error: no matching function for call to 'run'
                      synchronizer.addFuture(QtConcurrent::run(positionWidget, &PositionGroupbox::Select, false));
                                             ^~~~~~~~~~~~~~~~~
      

      Do you know what is wrong with the code?

      KroMignonK Offline
      KroMignonK Offline
      KroMignon
      wrote on last edited by KroMignon
      #5

      @peter-70 What is the type of synchronizer? It should be QFutureSynchronizer<void> to match PositionGroupbox::Select() signature.

      It is an old maxim of mine that when you have excluded the impossible, whatever remains, however improbable, must be the truth. (Sherlock Holmes)

      P 1 Reply Last reply
      0
      • P peter-70

        What is wrong with these code line:

        QtConcurrent::run(positionWidget, &PositionGroupbox::Select, false)
        

        positionWidget is a instance pointer of PositionGroupbox
        Select is public void with one bool parameter in the class PositionGroupbox

        The compiler shows me an error:

        error: no matching function for call to 'run'
                        synchronizer.addFuture(QtConcurrent::run(positionWidget, &PositionGroupbox::Select, false));
                                               ^~~~~~~~~~~~~~~~~
        

        Do you know what is wrong with the code?

        kshegunovK Offline
        kshegunovK Offline
        kshegunov
        Moderators
        wrote on last edited by
        #6

        Does PositionGroupbox derive from QWidget directly or indirectly?

        Read and abide by the Qt Code of Conduct

        P 1 Reply Last reply
        0
        • KroMignonK KroMignon

          @peter-70 Perhaps you have to enable concurrent in your PRO file:

          QT += concurrent
          
          P Offline
          P Offline
          peter-70
          wrote on last edited by peter-70
          #7

          @KroMignon said in Error on QtConcurrent::run:

          QT += concurrent

          Good idea, but unfortunately it does not help

          J.HilkJ 1 Reply Last reply
          0
          • P peter-70

            @KroMignon said in Error on QtConcurrent::run:

            QT += concurrent

            Good idea, but unfortunately it does not help

            J.HilkJ Offline
            J.HilkJ Offline
            J.Hilk
            Moderators
            wrote on last edited by J.Hilk
            #8

            @peter-70
            if you forgot QT += concurrent inside your *pro file, you have to do a complete rebuild - deleting build folder running qmake - for it to take effect, after adding it!

            Did you do that?


            Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


            Q: What's that?
            A: It's blue light.
            Q: What does it do?
            A: It turns blue.

            P 1 Reply Last reply
            0
            • kshegunovK kshegunov

              Does PositionGroupbox derive from QWidget directly or indirectly?

              P Offline
              P Offline
              peter-70
              wrote on last edited by
              #9

              @kshegunov

              Yes, PositionGroupbox derive from QWidget directly. But What does it matter?

              kshegunovK 1 Reply Last reply
              0
              • J.HilkJ J.Hilk

                @peter-70
                if you forgot QT += concurrent inside your *pro file, you have to do a complete rebuild - deleting build folder running qmake - for it to take effect, after adding it!

                Did you do that?

                P Offline
                P Offline
                peter-70
                wrote on last edited by
                #10

                @J.Hilk At first, I did not do it. Now I've deleted the output folder and the makefile. Then recreate the makefile and invoke rebuild my project. But that does not help either :-(

                1 Reply Last reply
                0
                • KroMignonK KroMignon

                  @peter-70 What is the type of synchronizer? It should be QFutureSynchronizer<void> to match PositionGroupbox::Select() signature.

                  P Offline
                  P Offline
                  peter-70
                  wrote on last edited by peter-70
                  #11

                  @KroMignon

                  It should be QFutureSynchronizer<void> to match PositionGroupbox::Select() signature

                  Yes it is!

                  Here is the code snippet:

                  QFutureSynchronizer<void> synchronizer;
                  
                      while ((rc = position.Fetch()) && rowIndex < itemsCount)
                      {
                          auto p = new Position;
                          p->Copy(&position);
                  
                          auto positionWidget = new PositionGroupbox(p, this);
                          p->SetContainer(positionWidget);
                  
                          synchronizer.addFuture(QtConcurrent::run(positionWidget, &PositionGroupbox::Select, false));
                  
                  KroMignonK 1 Reply Last reply
                  0
                  • P peter-70

                    @KroMignon

                    It should be QFutureSynchronizer<void> to match PositionGroupbox::Select() signature

                    Yes it is!

                    Here is the code snippet:

                    QFutureSynchronizer<void> synchronizer;
                    
                        while ((rc = position.Fetch()) && rowIndex < itemsCount)
                        {
                            auto p = new Position;
                            p->Copy(&position);
                    
                            auto positionWidget = new PositionGroupbox(p, this);
                            p->SetContainer(positionWidget);
                    
                            synchronizer.addFuture(QtConcurrent::run(positionWidget, &PositionGroupbox::Select, false));
                    
                    KroMignonK Offline
                    KroMignonK Offline
                    KroMignon
                    wrote on last edited by
                    #12

                    @peter-70 This sound very strange to me.

                    I have used QtConcurrent::run() and never run in this error.

                    I think you have include header:

                    #include <QtConcurrent/QtConcurrent>
                    

                    Can you show the declaration of PositionGroupbox::Select?

                    It is an old maxim of mine that when you have excluded the impossible, whatever remains, however improbable, must be the truth. (Sherlock Holmes)

                    P 1 Reply Last reply
                    0
                    • KroMignonK KroMignon

                      @peter-70 This sound very strange to me.

                      I have used QtConcurrent::run() and never run in this error.

                      I think you have include header:

                      #include <QtConcurrent/QtConcurrent>
                      

                      Can you show the declaration of PositionGroupbox::Select?

                      P Offline
                      P Offline
                      peter-70
                      wrote on last edited by peter-70
                      #13

                      @KroMignon

                      Can you show the declaration of PositionGroupbox::Select?

                      Yes, the include is as you write it here. But the declaration of PositionGroupbox::Select is the right question and solution!!!

                      100 points for you! ;-)

                      The declaration is:

                      void Select(bool isSelected, bool refreshColors = false);
                      

                      Now I call

                      synchronizer.addFuture(QtConcurrent::run(positionWidget, &PositionGroupbox::Select, false, false));
                      

                      and everything is ok!

                      @all: Thank you very much! Specially for KroMignon :-)

                      KroMignonK 1 Reply Last reply
                      0
                      • P peter-70

                        @KroMignon

                        Can you show the declaration of PositionGroupbox::Select?

                        Yes, the include is as you write it here. But the declaration of PositionGroupbox::Select is the right question and solution!!!

                        100 points for you! ;-)

                        The declaration is:

                        void Select(bool isSelected, bool refreshColors = false);
                        

                        Now I call

                        synchronizer.addFuture(QtConcurrent::run(positionWidget, &PositionGroupbox::Select, false, false));
                        

                        and everything is ok!

                        @all: Thank you very much! Specially for KroMignon :-)

                        KroMignonK Offline
                        KroMignonK Offline
                        KroMignon
                        wrote on last edited by
                        #14

                        @peter-70 your welcome

                        It is an old maxim of mine that when you have excluded the impossible, whatever remains, however improbable, must be the truth. (Sherlock Holmes)

                        1 Reply Last reply
                        1
                        • P peter-70

                          @kshegunov

                          Yes, PositionGroupbox derive from QWidget directly. But What does it matter?

                          kshegunovK Offline
                          kshegunovK Offline
                          kshegunov
                          Moderators
                          wrote on last edited by
                          #15

                          @peter-70 said in Error on QtConcurrent::run:

                          Yes, PositionGroupbox derive from QWidget directly. But What does it matter?

                          It matters quite a lot. QWidget is not thread-safe and it's not reentrant. You can't touch anything QWidget-y outside the GUI thread, including creating the actual object. Failing to observe this is a race condition and ultimately a bug. That is to say, you have bigger problems than a syntax error.

                          Read and abide by the Qt Code of Conduct

                          1 Reply Last reply
                          3

                          • Login

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