2016-05-31 3 views
1

Я использую функцию GetLocalTime(&time), чтобы получить время в visual C++. Теперь мне нужно экономить время всякий раз, когда ввод идет высоко, в другой структуре, чтобы я мог выполнять дальнейшие вычисления в течение сохраненного времени.Как сохранить время GetLocalTime в другой структуре

SYSTEMTIME time; 
if(input==high) 
{ 
    count++; //Incrementing a counter to count the number of times input is high 

    //Depending upon this count, I need to save value of time in a new variable 
    //using GetLocalTime to get current time 

    GetLocalTime(&time); 
} 

Как сохранить текущее время в зависимости от значений счета. Например, когда число равно 1, это означает, что входной сигнал высок в первый раз, поэтому сохраните его в a1. Если счетчик равен 2, сохраните время в a2. Если count равен 5, сохраните время в a5. Я не могу использовать коммутатор, потому что случаи не фиксированы, количество подсчетов может быть много. Какую еще логику я могу использовать для экономии времени в структуре.

+0

Использовать контейнер? например 'array',' vector' и т. д. – Rotem

+0

@Rotem, когда count равно 1, я сохранил время в массиве, но когда count равно 2, он перезапишет первые значения времени. ? или, может быть, я не понял, что вы пытаетесь сказать. –

+0

Нет, если вы используете 'count' в качестве индекса в массиве или вместо этого просто используете' vector :: push_back'. – Rotem

ответ

3

Чтобы сохранить ваши значения времени, вы должны использовать контейнер, например std::vector.

std::vector<SYSTEMTIME> savedTimes; 

SYSTEMTIME time; 
if (input == high) 
{ 
    //count++; //count is redundant now, you can later just check savedTimes.size() 
    GetLocalTime(&time); 
    savedTimes.push_back(time); //will add another value to the end of the vector. 
} 

сделать что-то с сохраненным время:

for (auto it = savedTimes.begin(); it != savedTimes.end(); ++it) 
{ 
    SYSTEMTIME time = *it; 
    //whatever... 
} 

или

for (int i = 0; i < savedTimes.size(); i++) 
{ 
    SYSTEMTIME time = savedTimes[i]; 
    //whatever... 
} 
+0

Это здорово. Но как я узнаю, для какого значения savedTime используется значение count. Кроме того, мне также нужно вычесть значения времени, и для этого мне нужно будет преобразовать их в время файла. Возможно ли использование векторов.? –

+0

@ Андрю Я добавил пример, в котором вы также можете получить доступ к векторным значениям по индексу, так что вы знаете, какое значение представляет собой индекс. Что касается вычитания и времени файла, это не имеет никакого отношения к исходному вопросу или векторам. Я предлагаю вам задать новый вопрос, который обсуждает это, независимо от хранения нескольких значений в контейнере. – Rotem

+0

Я пробовал это самостоятельно и добавил решение. Пожалуйста, взгляните на это. –

-1

Я решил эту проблему с помощью массива STRUC вания.

struct foo 
{ 
    WORD Year; 
    WORD Month; 
    WORD DayOfWeek; 
    WORD Day; 
    WORD Hour; 
    WORD Minute; 
    WORD Second; 
    WORD Milliseconds; 
}; 

struct foo Foo[20] 

Теперь, когда вход высок:

if(input==high) 
{ 
count++; 
GetLocalTime(&time); 


//This will copy complete time in Foo[0]. 
//So next time input is high, time will get copied in Foo[1] and this will keep on going.. 
memcpy(&Foo[count],&time,sizeof(Foo)); 

} 

Теперь я хочу знать, как очистить структуру Foo.?

+0

Downvoting в порядке, но, пожалуйста, попробуйте добавить комментарий, чтобы я мог понять, какую ошибку я совершил в своей логике. –

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