LINUX.ORG.RU

Как заставить код выполниться лишь раз в почти бесконечном цикле?

 , ,


0

1

Вот такой код

bool flag = true;
void Render()
{
    while(not_exit)
    {
        do_something();
        keyboard();
        if(flag)
            do_one_time();
    }
}
void do_one_time()
{
    ...
    flag = false;
}
void keyboard()
{
    if(key == f1)
        flag = true;
    if(key==f2)
    {
        ...
    }
    ...
}
void main()
{
    Init();
    Render();
    Release();
}

Нужно выполнить do_one_time лишь раз, конечно для этого можно завести глобальную переменную flag и в конце этой функции поменять его на false, но в функции keyboard идет проверка нажатия на клавиши f1 и флаг flag станет снова true, но в этом случае функция опять будет вызвана, а мне нужно ее вызвать в конце выполнения нажатия на другую клавишу f2, как быть?

Нет двоечник. Думай сам для этого и дают задания. Это уже вообще стыдоба...

LinuxDebian ★★★★ ()

Это такие толстые троли лезут сквозь разрывы в пространстве или это народ настолько думать разучился?

pon4ik ★★★★★ ()

:)- МНВ (Минимальное необходимое воздействие) from Конец Вечности


-
            do_one_time();
+
            {do_one_time();break}
qulinxao3 ()

А нельзя просто вместо flag = true просто do_one_time ?

AKonia ()

Какая задача-то стоит?

// оперативной группе приготовиться к зохвату!

Nervous ★★★★ ()

Если вот прямо такой код то флаг не нужен

    do_something();
    keyboard();
    do_one_time();

    while(not_exit)
    {
        do_something();
        keyboard();
    }

no-such-file ★★★★★ ()

Много как можно... Всё зависит от вашего извращённого вкуса. Я бы, например, на ООП переписал с синглтоном, внутри которого уже поставил проверки... Это вот чтобы прямо почти 100% гарантия была, чтобы код 1 раз отработал. Но и ограничения придут, которые могут геморроя дать (и дадут, если задача чуть отличается от задачи выполнить где-то в бесконечном цикле код 1 раз (на всю программу, а не на весь цикл)) сильно больше. Можно ещё больше упороться, а можно поступить просто - флаг завести...

Но вообще не понимаю, зачем вне ООП надо это делать именно в цикле. Если надо пилят функцию инициализации.

peregrine ★★★★★ ()
Последнее исправление: peregrine (всего исправлений: 2)

Через флаг. Но раз уж у тебя в тегах цпп, то используй std::call_once.

ox55ff ★★★ ()
Ограничение на отправку комментариев: только для зарегистрированных пользователей