Results 1 to 6 of 6

Thread: Qthreads

Hybrid View

Previous Post Previous Post   Next Post Next Post
  1. #1
    Join Date
    Jan 2006
    Location
    travelling
    Posts
    1,116
    Qt products
    Qt4
    Platforms
    Unix/X11 Windows
    Thanks
    8
    Thanked 127 Times in 121 Posts

    Default Re: Qthreads

    When playing with Qthread I often use the following code in the destructor :
    Qt Code:
    1. while ( isRunning() ) quit();
    To copy to clipboard, switch view to plain text mode 
    Current Qt projects : QCodeEdit, RotiDeCode

  2. #2
    Join Date
    Jan 2006
    Location
    Warsaw, Poland
    Posts
    33,373
    Qt products
    Qt3 Qt4 Qt5 Qt/Embedded
    Platforms
    Unix/X11 Windows Android Maemo/MeeGo
    Thanks
    3
    Thanked 5,019 Times in 4,795 Posts
    Wiki edits
    10

    Default Re: Qthreads

    Quote Originally Posted by fullmetalcoder View Post
    When playing with Qthread I often use the following code in the destructor :
    Qt Code:
    1. while ( isRunning() ) quit();
    To copy to clipboard, switch view to plain text mode 
    Oh, this really sucks - your CPU will go 100% if you do this. Calling wait() (and maybe quit() before that if you're running an event loop in the worker thread) should be enough, just make sure worker threads have a chance to exit at all.

  3. #3
    Join Date
    Jan 2006
    Location
    Munich, Germany.
    Posts
    111
    Qt products
    Qt3 Qt4
    Platforms
    Windows
    Thanks
    29
    Thanked 3 Times in 2 Posts

    Default Re: Qthreads

    It might not apply to your job, but...

    if you need to break off your job (stopping the thread in the middle of it's work) you can use a 'bool keepRunning' member variable in the threaded function.

    run(){
    keepRunning = true;
    do{
    //whatever - some short job
    }while(someCondition&&keepRunning);

    Then sub-class quit to look like

    void AutomationThread::quit()
    {
    keepRunning = false;
    QThread::quit();
    }
    Then you can stop the thread with
    myThread->quit();
    myThread->wait();//this will wait a maximum of one loop iteration.

    Not always applicable, but I use that method all the time - my threads can run for hours (monitoring things, waiting)

    by the way, a long sleep in my thread then looks like
    for(int i=0; i<someLargeWait&&keepRunning; ++i){
    msleep(100);
    }
    which can also be broken off quickly.

    K

  4. The following user says thank you to TheKedge for this useful post:

    Sheetal (29th March 2007)

Similar Threads

  1. QTcpSockets and QThreads
    By TheRonin in forum Newbie
    Replies: 3
    Last Post: 21st June 2006, 09:41

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
Qt is a trademark of The Qt Company.