Gerenciando a comunicação assíncrona: como examinar a resposta recebida em outro encadeamento
Eu tenho um thread de expedidor e um de ouvinte. Quando envio um comando, desejo aguardar uma resposta antes de enviar o comando de acompanhamento. Além disso, preciso examinar a resposta antes de prosseguir com o segundo comando, o mínimo dos quais é confirmar que a resposta foi recebida e que tudo está bem. Meu pseudo-código está abaixo:
void MainWindow::downloadData()
{
dispatcher->getInfo(); // sends command
// QString response = receiver->response() // idealy I would like to check response but since its async, i can't really do that!
dipatcher->askData(); // the 2nd command and so forth
}
Existe alguma maneira elegante de resolver esse problema? A única maneira de pensar é se eu usar o mesmo thread e todas as chamadas estiverem bloqueadas, mas isso não é necessariamente uma boa solução.
No Qt, eu poderia usar sinais e slots para conectá-los em cascata; assim, quando o primeiro sinal é acionado, inicia toda a sequência de operação (cada slot que emite um novo sinal), mas também parece bastante sujo.