Как запустить программу на определенное время?

Мне нужно,чтобы программа отработала ровно 30 секунд? Как такое реализовать на с++/с

int main()
{
    int start = clock(); // засекаем время старта
    // далее фрагмент кода, время работы которого измеряется
    int i,j;

    for(i = 0; i < 1000; i++)
    {
        for(j = 0; j < 100; j++)
        {
            cout<<"a";
            fflush(stdout);
        }
    }
    int end = clock(); // засекаем время окончания
    int t = (end - start) / CLOCKS_PER_SEC;// команда CLOCKS_PER_SEC нужна для перевода результата функции clock в секунды

    cout<<" "<<t; // вывод результата работы на экран
}

при такой реализации выводится 0. Может можно сделать как-то по-другому?


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

Автор решения: V-Mor

0 у Вас выводится из-за того, что выполнение программы занимает менее одной секунды, то есть число при делении на CLOCKS_PER_SEC получается дробное. А Вы его присваиваете переменной типа int, которая представляет целое число. В результате производится округление до целого и получается 0. Чтобы исправить ситуацию, необходимо использовать переменную дробного типа, а также привести к дробному типу переменные, содержащие начальную и конечную метки времени:

int main()
{
    int start = clock(); // засекаем время старта
    // далее фрагмент кода, время работы которого измеряется
    int i,j;

    for(i = 0; i < 1000; i++)
    {
        for(j = 0; j < 100; j++)
        {
            cout<<"a";
            fflush(stdout);
        }
    }
    int end = clock(); // засекаем время окончания
    double t = (static_cast<double>(end) - static_cast<double>(start)) / CLOCKS_PER_SEC;// команда CLOCKS_PER_SEC нужна для перевода результата функции clock в секунды

    cout<<" "<<t; // вывод результата работы на экран
}

На всякий случай поясню: static_cast<тип 2>(переменная типа 1) используется для приведения типа переменной из типа 1 в тип 2. Это аналогично (тип 2)переменная типа 1 в "чистом" Си (который без ++).

Теперь программа будет выводить дробное число, показывающее сколько секунд заняло выполнение цикла с выводом.

→ Ссылка