2015-01-24 3 views
0

Я пытаюсь использовать функцию () функции doAction() в примере ниже) через определенное время. В следующем примере я должен использовать функцию 10 раз, сначала 1 миллисекунду после ввода цикла while, второй - через 3 секунды после ввода цикла while и т. Д.Альтернатива GetSystemTime() для отслеживания пройдена

Проще говоря, мне нужен способ измерения времени, прошедшего с начала цикла while, в любой момент, чтобы я мог применить функцию doAction() в определенные моменты.

ВОПРОС: Какой метод я могу использовать для отслеживания того, сколько времени прошло между начальным моментом и любым другим моментом после этого? Отредактировано: Я использую Windows 7

В настоящее время я использую следующие настройки с помощью функции GetSystemTime(), которая работает, хотя есть некоторые вопросы:

int countVar = 0; 
int timeList[10] = {1, 3, 6, 7, 9, 11, 14, 15, 17, 19}; 
    /*values representing milliseconds after initiating the while loop*/ 

SYSTEMTIME timeBuffer; 
GetSystemTime(&timeBuffer); 
int initialTime = timeBuffer.wMilliseconds + (timeBuffer.wSecond*1000) + (timeBuffer.wMinute*60000); 
int currentTime; 

while (true) 
{ 
    GetSystemTime(&timeBuffer); 
    currentTime = timeBuffer.wMilliseconds + (timeBuffer.wSecond*1000) + (timeBuffer.wMinute*60000) - initialTime; 

    if (currentTime >= timeList(countVar) 
    { 
     doAction(); 
     if (countVar!=9) 
     countVar++; 
     else 
     break; 

    } 

} 

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

void doAction() /*this is the action done which is completed in 
       microseconds hence would not have a significant 
       delay in time*/ 
{ 
    .... 
} 

Проблемы эта установка имеет, однако, выглядит следующим образом:

1) если системное время было 59 минут и 59 секунд, в следующий раз система, которую я искал бы бы в течение 59 минут и 59 секунд , который я бы не смог получить, если я не включил wHours в расчет, и то же самое можно сказать в течение нескольких дней и недель и т. д.

2) Я бы предпочел использовать функцию, которая при использовании начинает отсчет вниз, а когда повторное использование этой функции сообщит мне, сколько миллисекунд было использовано после начала обратного отсчета. Однако я пока не нашел такой функции, как в msdn.

Если кто-то может указать мне направление лучшей функции для использования, чем GetSystemTime(), чтобы измерить, сколько времени прошло через определенный момент, это было бы потрясающе!

Отредактировано: Я использую Windows 7

+0

Несмотря на то, что это интересный вопрос, он должен содержать либо windows/linux/любой другой тег ОС тоже. – basav

+0

Текущее время действительно актуально?Достаточно ли было бы так же похожего на секундомер поведения? – Caramiriel

+0

В Linux у вас есть монотонные таймеры, которые дадут вам точный интервал времени ... Но не уверены в Windows. – basav

ответ

0

Если вы используете C++ 11 вы можете:

включают Chrono

начинается станд :: хроно :: system_clock :: time_point ;

start = std :: chrono :: system_clock :: now();

ли ваш материал здесь ...

авто заканчивается = станд :: хроно :: system_clock :: сейчас();

auto elapsed = std :: chrono :: duration_cast (заканчивается - начинается);

Это даст вам истекшее время в секундах.

+0

может ли это работать миллисекунды? Мне нужно время, чтобы быть точным, по крайней мере, 1 миллисекунду для моей конкретной цели. – CodeBlocks

+0

Да, вы получите всю необходимую информацию здесь: http://en.cppreference.com/w/cpp/chrono/duration – Moo

Смежные вопросы