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. How to know thread is running from different button ?
Forum Updated to NodeBB v4.3 + New Features

How to know thread is running from different button ?

Scheduled Pinned Locked Moved Solved General and Desktop
22 Posts 5 Posters 6.8k Views 1 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.
  • SGaistS Offline
    SGaistS Offline
    SGaist
    Lifetime Qt Champion
    wrote on last edited by
    #12

    Remove MyThread * from your constructor.

    Interested in AI ? www.idiap.ch
    Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

    1 Reply Last reply
    1
    • H Hiloshi

      Dear @jsulm , @SGaist

      Sorry to confuse you, I didn't explain clearly.

      If I use "new" and "T3Thread->start" in the same area, then it will no error(process killed by signal),
      as below:
      https://www.dropbox.com/s/0488sqlhgn9u4wf/Screenshot from 2017-04-06 09-28-32.png?dl=0
      alt text

      However, if I put them in different place, application will crash and return "process killed by signal",
      as below:
      https://www.dropbox.com/s/3dfists06z3c5q9/Screenshot from 2017-04-06 09-33-10.png?dl=0
      alt text

      Moreover, if I put "new" just after the "ui->setupUi(this)" and "T3Thread in the on_pushButton_clicked,
      it will show a warning message "unused variable ‘T3Thread’ [-Wunused-variable]".

      @SGaist , I think maybe this is what you said : "uninitialised pointer " .

      But, I am sorry, I don't know how to correct it.

      jsulmJ Online
      jsulmJ Online
      jsulm
      Lifetime Qt Champion
      wrote on last edited by
      #13

      @Hiloshi You should really read more carefully what others are writing. What @SGaist said is:

      MainWindow::MainWindow(QWidget *parent) :
          QMainWindow(parent),
          ui(new Ui::MainWindow)
      {
          ui->setupUi(this);   
          T3Thread = new MyThread; // Remove MyThread* - else you are declaring a local variable which is completely unrelated to the one in your header!
          T3Thread->start();
      }
      

      And after this change think about where to start the thread: in the code you posted you're doing it twice.

      https://forum.qt.io/topic/113070/qt-code-of-conduct

      1 Reply Last reply
      1
      • H Offline
        H Offline
        Hiloshi
        wrote on last edited by
        #14

        Very happy to learn from here. Thanks everyone.

        1 Reply Last reply
        0
        • H Offline
          H Offline
          Hiloshi
          wrote on last edited by
          #15

          I want to study in depth in this question. In the original question, I have a running T3Thread, mainwindow cannot reach T3Thread, thanks for @a-normal-worker 's suggestion, we can make T3Thread as a class member of mainwindow then mainwindow have ability to access T3Thread.

          Can we use signal/slot instead of using class member ?

          1 Reply Last reply
          0
          • SGaistS Offline
            SGaistS Offline
            SGaist
            Lifetime Qt Champion
            wrote on last edited by
            #16

            What exactly do you want to do with your thread ?

            Interested in AI ? www.idiap.ch
            Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

            1 Reply Last reply
            1
            • H Offline
              H Offline
              Hiloshi
              wrote on last edited by
              #17

              Dear @SGaist ,

              I am thinking to create a breathing LED in my thread, "run" function is keep turn on/off LED.
              I want to put one button on mainwindow to start the thread.

              I do not want this button to be pressed twice ( or thread will create twice), so in the button I put:

              void MainWindow::on_pushButton_3_clicked()
              {
                  if(T3Thread->isRunning()==false)
                  {
                      MyThread  *T3Thread = new MyThread;  // local variable
                      T3Thread->start;
                  }
                  else
                      qDebug()<<"T3 thread is running";
              }
              

              If I do not want to use class member, can I use signal/slot to know T3Thread is running or not ?

              Thanks.

              J.HilkJ 1 Reply Last reply
              0
              • H Hiloshi

                Dear @SGaist ,

                I am thinking to create a breathing LED in my thread, "run" function is keep turn on/off LED.
                I want to put one button on mainwindow to start the thread.

                I do not want this button to be pressed twice ( or thread will create twice), so in the button I put:

                void MainWindow::on_pushButton_3_clicked()
                {
                    if(T3Thread->isRunning()==false)
                    {
                        MyThread  *T3Thread = new MyThread;  // local variable
                        T3Thread->start;
                    }
                    else
                        qDebug()<<"T3 thread is running";
                }
                

                If I do not want to use class member, can I use signal/slot to know T3Thread is running or not ?

                Thanks.

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

                @Hiloshi
                ok, I think we talk at cross here.

                Here's a basic setup to check if your thread is running when you press a Button, if its not running the button will start the thread:

                //in your header:
                example.h
                
                #include <QThread>
                #include <qDebug>
                
                private:
                QThread *thread;
                
                //in your source file
                
                //Constructor
                {
                    ui->setupUi(this);   
                    thread = new QThread;
                ....
                }
                
                
                void on_pushButton_clicked(){
                   if(thread->isRunning())
                      qDebug() << "Thread is running";
                   else{
                      qDebug() << "Thread started";
                      thread->start(); 
                   }
                }
                
                //Destructor
                {
                  if(thread->isRunning()){
                   thread->quit();
                   thread-> wait();
                  }
                ...
                  delete ui;
                }
                

                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.

                1 Reply Last reply
                1
                • SGaistS Offline
                  SGaistS Offline
                  SGaist
                  Lifetime Qt Champion
                  wrote on last edited by
                  #19

                  What is the problem with using a member variable to handle that thread object properly ?

                  Interested in AI ? www.idiap.ch
                  Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                  H 1 Reply Last reply
                  1
                  • SGaistS SGaist

                    What is the problem with using a member variable to handle that thread object properly ?

                    H Offline
                    H Offline
                    Hiloshi
                    wrote on last edited by
                    #20

                    @SGaist , There is no problem using member variable. I just thinking if it possible to use signal/slot to reach the same purpose.

                    1 Reply Last reply
                    0
                    • SGaistS Offline
                      SGaistS Offline
                      SGaist
                      Lifetime Qt Champion
                      wrote on last edited by
                      #21

                      There could be ways however you are talking about creating an object somewhere without any reference to it and still want to interact with it. That's bad by design.

                      Interested in AI ? www.idiap.ch
                      Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                      H 1 Reply Last reply
                      1
                      • SGaistS SGaist

                        There could be ways however you are talking about creating an object somewhere without any reference to it and still want to interact with it. That's bad by design.

                        H Offline
                        H Offline
                        Hiloshi
                        wrote on last edited by Hiloshi
                        #22

                        @SGaist , Understood, thanks for the 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