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

Начинающий
Статус
Оффлайн
Регистрация
23 Июн 2022
Сообщения
101
Реакции[?]
4
Поинты[?]
1K
типо чтобы 10 секунд была анимация и после них лоудер закрылся как это сделать
 
I Want to Die in New Orleans
Участник
Статус
Оффлайн
Регистрация
10 Окт 2020
Сообщения
516
Реакции[?]
496
Поинты[?]
85K
как вариант
C++:
float timer = 0.f;
if (timer < 1000.f) {
    timer += 1.f;
    // все действия
}
 
I Want to Die in New Orleans
Участник
Статус
Оффлайн
Регистрация
10 Окт 2020
Сообщения
516
Реакции[?]
496
Поинты[?]
85K
std::this_thread::sleep_for(std::chrono::seconds(5));
если я правильно понял то он просит "слип без слипа", просто задержку в действии перед тем как перейти к следующему этапу без заморозки рендера всего потока (насколько я понял он работает в ImGui)
 
Эксперт
Статус
Оффлайн
Регистрация
29 Мар 2021
Сообщения
1,596
Реакции[?]
605
Поинты[?]
46K
если я правильно понял то он просит "слип без слипа", просто задержку в действии перед тем как перейти к следующему этапу без заморозки рендера всего потока (насколько я понял он работает в ImGui)
какая проблема может возникнуть если работать с делеем в отдельном потоке?
 
I Want to Die in New Orleans
Участник
Статус
Оффлайн
Регистрация
10 Окт 2020
Сообщения
516
Реакции[?]
496
Поинты[?]
85K
какая проблема может возникнуть если работать с делеем в отдельном потоке?
никакая, но нигде ничего не упоминалось про создание дополнительного потока.
 
Начинающий
Статус
Оффлайн
Регистрация
23 Июн 2022
Сообщения
101
Реакции[?]
4
Поинты[?]
1K
I Want to Die in New Orleans
Участник
Статус
Оффлайн
Регистрация
10 Окт 2020
Сообщения
516
Реакции[?]
496
Поинты[?]
85K
Код:
                float timer = 0.f;
                if (timer < 10000.f) {
                    timer += 1.f;
                    exit(-1);
                }
вот так?
если ты пишешь какой-либо лоадер на плюсах, то должен понимать хотя-бы основы.
C++:
if (timer >= 9999.f) {
        exit(0);
}
тут лучше юзай вместо float - int
 
Obstruct Omicronium
Пользователь
Статус
Оффлайн
Регистрация
28 Авг 2022
Сообщения
67
Реакции[?]
78
Поинты[?]
66K
Можно попробовать еще поколдовать с винапишными таймерами, конкретно, с этими функами:
Пожалуйста, авторизуйтесь для просмотра ссылки.
,
Пожалуйста, авторизуйтесь для просмотра ссылки.
и
Пожалуйста, авторизуйтесь для просмотра ссылки.
.
 
Забаненный
Статус
Оффлайн
Регистрация
2 Мар 2021
Сообщения
1,083
Реакции[?]
406
Поинты[?]
1K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
C++:
// пример таймера 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)) {
    // твой код дальше
}
 
Сверху Снизу