Функция C, которая останавливается через указанное время в миллисекундах - PullRequest
0 голосов
/ 19 октября 2018

Я написал код для этого, но он не работает.Это код:

#include <stdio.h>
#include <time.h>

long timediff(clock_t t1, clock_t t2) {
    long elapsed;
    elapsed = ((double)t2 - t1) / CLOCKS_PER_SEC * 1000;
    return elapsed;
}

int main(void) {
    clock_t t1, t2;
    int i;
    long elapsed;

    long settime = 9;   
    t1 = clock();
    for (i=0; i > 10000000; i++) {
           t2 = clock();
       elapsed = timediff(t1, t2);
           if (elapsed==settime)
                 printf("set time reached\n");
        break;
    }



    printf("elapsed: %ld ms\n", elapsed);


    return 0;
}

По какой-то причине он не выполняет оператор if.Единственное, что я вижу напечатанным на терминале, это elapsed: 4195440 ms.Мне нужно иметь возможность указать, как долго я хочу, чтобы программа работала до того, как ее обрежут.

Например, так, как я хочу, чтобы этот код выполнялся, я установил заданное время равным 5, чтобы через 5 миллисекунд код останавливался, и на терминал выводилось сообщение «установленное время достигнуто».Я не уверен, если это важно, но я использую ОС Ubuntu.

Ответы [ 3 ]

0 голосов
/ 19 октября 2018

Вам необходимо включить break в тело if

                 if (elapsed==settime)
                 {printf("set time reached\n");
                 break;}

Как предлагается в разделе комментариев, вы должны изменить условие цикла for, иначе оно не будет выполнено.Измените это for (i=0; i > 10000000; i++) на for (i=0; i < 10000000; i++)

0 голосов
/ 19 октября 2018

clock() просто не могу зарегистрировать работу, которая занимает небольшое количество времени.Это довольно неожиданно, поскольку clock () должна возвращать процессорное время, используемое программой.Разрешение зависит от операционной системы, но обычно составляет от 10 до 16 мс.

В вашем коде мы видим long settime = 9;.Это означает, что вы ожидаете остановиться на 9 мс, что меньше, чем разрешение 10 мс, равное clock().

В качестве обходного пути можно изменить следующий код:

if (elapsed==settime)
      printf("set time reached\n");
break;

на

if (elapsed>=settime) {
        printf("set time reached\n");
        break;
}
0 голосов
/ 19 октября 2018

Проверьте положение инструкции break; Должно быть в блоке if!также знак в цикле for;должно быть i<1000000

...