From QTimer's docs (Qt 4.5.2)
In multithreaded applications, you can use QTimer in any thread that has an event loop. To start an event loop from a non-GUI thread, use QThread::exec(). Qt uses the timer's thread affinity to determine which thread will emit the timeout() signal. Because of this, you must start and stop the timer in its thread; it is not possible to start a timer from another thread.
maybe that book is on Qt3?

anyway, just as in the gui thread, if your long running job is running, the threads event loop does not get to process events