Important: Please read the Qt Code of Conduct -

QTimer singleShot resolution

  • I am building a networked event controled application. The events are very simple:

    Client sents a request to a server;
    Server gets the request and sends a response back to the client.

    It works well, but probably not perfect. The problem is I want to use QTimer single shot events to know if I don't get a response back within a specific time, it is pretty big, so the client knows when it should go into the devcon 3 state :).

    In the class constructor I have:
    cmdTimer = new QTimer();
    connect(cmdTimer, SIGNAL(timeout()), this, SLOT(timeout()));
    connect(this, SIGNAL(stopTimer(int)), cmdTimer, SLOT(stop()));

    I start the singleShot timer as follows:
    // just before the request
    cmdTimer->singleShot(100, this, SLOT(timeout()));

    I stop the timer if the event comes in as follows:
    emit stopTimer();

    If the response comes back before the timeout is fired all is good, the timer is stoped and I never get the timeout. I am trying to ensure it works correctly so I have the server sleep for a period twice as long as the singleshot request and I expect to get a timeout with each request.

    I get the first couple of timeouts correctly, but after a few they stop for 4 commands and after the 4th command I get the 4 outstanding timeouts. Also, could this be because I am still debugging the app on a single machine?

Log in to reply