Итак, я знаю, что в Qt вы можете просто положить все, что захотите, после того, как сигнал появится в слот, но при редактировании кода позже; что может потребовать много реструктуризации и может усложнить ситуацию.Каков самый простой способ заставить вашу программу ждать сигнала в Qt?
Есть ли более простой способ держать вашу программу, пока сигнал не излучается в Qt, как, скажем, к примеру:
downloadImage();
Qt::waitForSignal(downloadImageFinished());
editImage();
Также; почему это не работает:
// bool isFinished();
downloadImage(); // When done, isFinished() returns true;
while (!isFinished()) {}
editImage();
? Благодарю.
Вы задаете неправильный вопрос. Мир вокруг нас не прост и не эволюционирует линейно. Все происходит асинхронно. Вам нужно структурировать код, чтобы отразить это. Псевдосинхронный код, который вы представляете в вопросе, является неявным автоматом. Вы получите больше ясности и гибкости, сделав явное поведение с учетом состояния. * что может потребовать много реструктуризации и может усложнить ситуацию * Только если вы сделаете это неправильно. Измените свой вопрос, чтобы иметь более полный пример того, что вы пытаетесь сделать. Таким образом можно было бы решить ваши необоснованные презумпции сложности. –
@KubaOber Иногда это нужно сделать - например, дождаться завершения всех действий и всех блокировок для разблокировки перед выключением программы. Я столкнулся с этим первым, когда пользователь нажал кнопку окна «X» во время тяжелой обработки видео, не останавливая его - многие потоки были подняты, и было выделено много ресурсов, что приводило к случайным сбоям и предупреждениям при выключении, когда мьютексы не были разблокированы должным образом. –
Когда пользователь хочет закрыть окно, у вас есть полный контроль над закрытием этого окна и над тем, какую обратную связь будет предлагать ваш код пользователю. Леонтьев. У вас, похоже, очень конкретный вопрос. Вы можете опубликовать новый автономный вопрос, который создает некоторые потоки или что-то еще, приобретает блокировки и демонстрирует вашу проблему. Он будет соответствовать 200 линиям. Только тогда может быть представлено решение, которое обойдутся проблемами, которые вы ожидаете. В противном случае, это слишком абстрактно, чтобы говорить. –