Как правильно работать с QThread?
В Qt есть абстракция над потоками QtConcurrent. В ней есть метод run. Куда можно забросить метод, который вы хотите выполнить асинхронно. run вернет вам QtFuture. Через него мы можем узнать, что сейчас происходит с нашим потоком(завершился или еще работает). QtFuture можно передать в QtFutureWatcher в котрого есть сигнал finished, который стрельнет когда функция завершить свою работу.
Преимуществом данного подхода является, то что Qt берет на себя всю волокиту с созданием и управлением потоков.
Используйте сообщения Windows через Api функции SendMessage/PostMessage для взаимодействия между потоками.