C++ Как сделать sleep для программы без замораживания процесса

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
23 Июн 2022
Сообщения
101
Реакции
3
типо чтобы 10 секунд была анимация и после них лоудер закрылся как это сделать
 
как вариант
C++:
Expand Collapse Copy
float timer = 0.f;
if (timer < 1000.f) {
    timer += 1.f;
    // все действия
}
 
std::this_thread::sleep_for(std::chrono::seconds(5));
 
std::this_thread::sleep_for(std::chrono::seconds(5));
если я правильно понял то он просит "слип без слипа", просто задержку в действии перед тем как перейти к следующему этапу без заморозки рендера всего потока (насколько я понял он работает в ImGui)
 
если я правильно понял то он просит "слип без слипа", просто задержку в действии перед тем как перейти к следующему этапу без заморозки рендера всего потока (насколько я понял он работает в ImGui)
какая проблема может возникнуть если работать с делеем в отдельном потоке?
 
какая проблема может возникнуть если работать с делеем в отдельном потоке?
никакая, но нигде ничего не упоминалось про создание дополнительного потока.
 
Код:
Expand Collapse Copy
                float timer = 0.f;
                if (timer < 10000.f) {
                    timer += 1.f;
                    exit(-1);
                }
вот так?
если ты пишешь какой-либо лоадер на плюсах, то должен понимать хотя-бы основы.
C++:
Expand Collapse Copy
if (timer >= 9999.f) {
        exit(0);
}
тут лучше юзай вместо float - int
 
Можно попробовать еще поколдовать с винапишными таймерами, конкретно, с этими функами:
Пожалуйста, авторизуйтесь для просмотра ссылки.
,
Пожалуйста, авторизуйтесь для просмотра ссылки.
и
Пожалуйста, авторизуйтесь для просмотра ссылки.
.
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
C++:
Expand Collapse Copy
// пример таймера Spinner'a для ImGui
// анимация спиннера будет длиться 5 секунд

// инициализация функции SetTimer:
bool ImGui::SetTimer(float delay) {
    static double end_time = ImGui::GetTime() + delay;

    if (ImGui::GetTime() <= end_time) {
        return true;
    }
    else return false;
}

// объявление:
ImGui::Spinner("##preparing", 15.f, 3, ImGui::GetColorU32(ImGuiCol_CheckMark));
if (!ImGui::SetTimer(5.f)) {
    // твой код дальше
}
 
Назад
Сверху Снизу