Important: Please read the Qt Code of Conduct -

[Solved] Easy way to run loops without GUI freezing?

  • Hello there,

    I've got a little problem which i can't solve by myself. I have written a program which recieves pictures from a TCP-Socket. The program has to start and find its server by itself, because the computer it's going to run on hasn't got a monitor or a keyboard. When the program starts, it checks an IP-List for a running server. Following function is called from the GUI:

    @void MultiClientSocket::firstTryConnect()
    QString helper = QString::number(host);

    int counter = 0;
    while((state() == QAbstractSocket::UnconnectedState) == true)                                                             
        ipAddress =;
        if((counter == (ipList.size()-1))==true)
            counter = 0;
    emit setIP(ipAddress);
    emit setStatus("Connecting...");


    Of course the GUI is freezing when the program is searching for a server. I know there are many ways to stop that, with threading for example. But I don't know how to use them. Is there a possibility without threading or finding a running server without connecting?

    Thank you for your help!


    I'm using QT 5.0.1 with QT Creator 2.6.2 on a Windows 7 64Bit Computer

  • Moderators

    You can use qApp::processEvents() inside your loop to keep the GUI responsive. It's probably better to rethink the design, though.

  • Moderators

    why do you care if the gui freezes when the program is supposted to run on a computer without keyboard and a monitor? :)

  • You probably want to put functions that take a lot of time into a "background" thread.

    You can emit a signal from the "background" thread and then have the GUI thread react on it in a slot, as soon as the final result is known or some status update (which the GUI needs to know about) has occurred.

    Use the Qt::QueuedConnection connection type for this purpose, so the slot will be executed in "main" thread.


    See also:

  • Thank you for your help!

    works very fine.

    Even when the program should start by itself, I have to use the GUI for test-purposes. I think its better when the program runs on every computer and doesn't confuse users by freezing =)

  • Nevertheless, keep in mind that qApp->processEvents() processes all pending events, which means that it may process also pending signals, which in turn, may call into slot functions - which probably is not what you want in the middle of your loop. Also, it can easily construct a nice infinite recursion, if you call qApp->processEvents() from within a slot, as it might result in calling exactly that slot. So, you have to be very careful with it...

    (Doesn't mean it can't work nice for your particular program)

Log in to reply