Сокеты и QThread - как корректно завершить поток

1) не нужно предопределять run(), почитайте про moveToThread().

2) если будете использовать moveToThread(), то поток завершаем так:

C++ (Qt)Выделить код

1
2
3

th->quit();
th->wait();
delete th;

Если все же run() - то нужно заводить отдельную булевую переменную которая будет обрывать while'ы.

3) Сигналы у вас не работают так как при наследовании run() нужно вручную запускать цикл событий, по умолчанию его нет.