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.
  • 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?

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

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


    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.

    KroMignonK 1 Reply Last reply
    0
    • 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