2013-06-20 3 views
0

Я пытаюсь контролировать продолжительность выполнения приложения с помощью счетчика таймера. Я вижу, что time.h выполняет эту работу.Длина цикла - контроль времени - C

#include <time.h> 

#define SIZE 256 
void main(){ 
     time_t curtime,endtime; 
     struct tm *loctime, *etime; 
     char buffer[SIZE]; 

     //TIME 
     curtime = time(NULL); 
     endtime = curtime + 2*60; 
     loctime = localtime (&curtime); 
     etime = localtime (&endtime); 
     strftime (buffer, SIZE, "The time is %S \n", loctime); 
     fputs (buffer, stdout); 
     strftime (buffer, SIZE, "The time is %S.\n", etime); 
     fputs (buffer, stdout); 
} 

Почему я начинаю и заканчиваю время, чтобы быть одинаковым.

+0

Но я увеличиваю время на 120 секунд. – pistal

+0

Вы ничего не делаете, чтобы контролировать длину выполнения - вообще не спать и т. Д. – John3136

+0

Но приращение должно по крайней мере давать разницу в прошедшее время, не так ли? – pistal

ответ

2

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

У вас есть два варианта,

  1. После первого вызова localtime(), скопируйте возвращаемое значение в другой локальной переменной и назвать его второй раз.
  2. Используйте вместо этого localtime_r(). (Preferred)

Man страница localtime and localtime_r.

+0

В нем указано слишком мало аргументов для функции 'localtime_r' – pistal

+0

Связанная страница man содержит прототип функции' localtime_r', который является 'struct tm * localtime_r (const time_t * timep, struct tm * result);'. Поэтому отправьте адрес действительного 'struct tm' в качестве второго параметра. Пример: http://publib.boulder.ibm.com/infocenter/iadthelp/v7r5/index.jsp?topic=/com.ibm.etools.iseries.langref.doc/rzan5mst156.htm – VoidPointer

+0

time_t curtime, endtime; struct tm * loctime, * etime, newtime; loctime = localtime (& curtime); etime = localtime_r (& endtime, & newtime); Правильно ли я сейчас? – pistal

0

Вы должны использовать localtime_r вместо localtime, чтобы получить два разных времени.

От man localtime:

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

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