On Wednesday, 24 April 2019 14:11:09 PDT Tom Isaacson wrote: > I've got some legacy code where a timer is firing on the wrong thread. The > sequence is: 1. Thread instantiates MyClass. > 2. MyClass constructor calls QTimer::singleShot(60 * 1000, this, > &MyClass::OnTimer); 3. Move class to thread by calling > MyClass.moveToThread(); > 4. OnTimer is called on the wrong thread. > > I assume because the constructor sets the timer before the class is moved to > the thread, the timer is firing on the wrong thread. Obviously I can move > the timer to a different function then call that after moveToThread() but > is there a standard way of fixing this?
Don't use QTimer::singleShot, but instead use a QTimer object whose parent is the object that you will move. That will move the timer too, by unregistering it in the original thread and re-registering in the target thread once the move is complete. -- Thiago Macieira - thiago.macieira (AT) intel.com Software Architect - Intel System Software Products _______________________________________________ Interest mailing list Interest@qt-project.org https://lists.qt-project.org/listinfo/interest