Ну то бишь верно будет так:
C++ (Qt)
QThread thread;
Worker * worker = new Worker;
worker->moveToThread( &thread );
QObject::connect( &thread, SIGNAL( finished() ), worker, SLOT( deleteLater() ) );
thread.start();
...
thread.quit();
thread.wait();
Это будет работать, так как finished() вызывается в потоке, в котором функционирует worker.
При этом важно, чтобы connect был выполнен по умолчанию (с опцией Qt::AutoConnection).
При этом wait() обязателен до удаления экземпляра thread, иначе снова может получиться)
QThread: Destroyed while thread is still running
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.