Необходимо реализовать цикл, пока выполняется функция

Я написал цикл с миганием текста

void BlinkingTex()
{
    while(1)
        {
        cout<<"Сейчас играет: Джон Уильямс - Имперский марш" << endl;
        system("CLS");
        } 
}

Нужно, чтобы этот цикл выполнялся до тех пор, пока играет мелодия, состоящая из Beep()

void StarWars()
{  
int a = 750;

     Beep(392, a);
     Beep(392, a);
     Beep(392, a);
     Beep(311, a*0.75);
     Beep(466, a*0.25);

     Beep(392, a);
     Beep(311, a*0.75);
     Beep(466, a*0.25);
     Beep(392, a*2);

     Beep(587, a);
     Beep(587, a);
     Beep(587, a);
     Beep(622, a*0.75);
     Beep(466, a*0.25);

     Beep(369, a);
     Beep(311, a*0.75);
     Beep(466, a*0.25);
     Beep(392, a*2);
}

Проблема в том, что мне нужно вовсе не бесконечное выполнение цикла, а лишь на ограниченное время, пока играет мелодию любой длительности. Как можно реализовать параллельное выполнение цикла, пока выполняется определённая функция любой продолжительности выполннения?


Ответы (1 шт):

Автор решения: Harry

Что-то типа

atomic<bool> blink = true;

void BlinkingTex()
{
    while(blink)
    {
        cout << "Сейчас играет: Джон Уильямс - Имперский марш\r";
        this_thread::sleep_for(100ms);
        cout << "                                            \r";
        this_thread::sleep_for(100ms);
    }
}

void StarWars()
{
    int a = 750;

    Beep(392, a);

    ...
    Beep(392, a*2);

    blink = false;
}

int main()
{
    thread(BlinkingTex).detach();
    StarWars();
    system("pause");
}
→ Ссылка