Пятница, вечер, торможу....
Есть фоновый процесс общающийся с главным через сигналы. Главный процесс
обычно пихает в очередь кучку запросов, а потом рисует GUI, изредка отвлекаясь на отрисовку ответов от фонового процесса. Все замечательно и чудесно.
А тут понадобилось послать несколько запросов подряд и обязательно дожидаться от них ответов...
Теперь вот сижу и думаю, как можно временно сменить асинхронную работу на синхронную если получение ответа идет через сигналы? Мне ж в любом случае надо заводить получателя? В общем получилась вот такая цепочка:
void A::main_sub() {
connect(server, SIGNAL(results()), this, SLOT(firstResponse());
server->request("first request");
}
void A::firstResponse() {
disconnect(server, SIGNAL(results()), this, 0);
connect(server, SIGNAL(results()), this, SLOT(secondResponse());
server->request("second request");
}
void A::secondResponse() {
disconnect(server, SIGNAL(results()), this, 0);
connect(server, SIGNAL(results()), this, SLOT(thirdResponse());
server->request("third request");
}
void A::thirdResponse() {
disconnect(server, SIGNAL(results()), this, 0);
connect(server, SIGNAL(results()), this, SLOT(normalResponseToUsersRequest());
}
Вроде работает, но как-то это все излишне кучеряво. Есть решения попроще, не требующие копи-паста?