Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.07.2013, 12:11   #1
GoriZonTT
Пользователь
 
Регистрация: 12.12.2010
Сообщений: 15
Лампочка Как проще? Время с начала запуска

Тема из разряда "как проще?".

Нужно отсчитывать секунды, минуты и часы с начала запуска программы. Самый просто способ - делать это вручную: взять 3 штуки Label(названия, к примеру, Hour,Minute,Second), обнулить и прибавлять единицу в Second каждый раз когда пройдет 1000мс. Minute меняется в зависимости от Second, а Hour в зависимости от Minute. Вопрос: может есть какие-то компоненты по умолчанию считающие это все? И я зря это все пишу по незнанию? Можно проще?

Мне лично проще так.
GoriZonTT вне форума Ответить с цитированием
Старый 19.07.2013, 12:12   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

А зачем каждую секунду? Вот когда кто-то затребует информацию, тогда считать время опять и выдать разницу.
waleri вне форума Ответить с цитированием
Старый 19.07.2013, 12:13   #3
GoriZonTT
Пользователь
 
Регистрация: 12.12.2010
Сообщений: 15
По умолчанию

потому что запрашивают каждую секунду
GoriZonTT вне форума Ответить с цитированием
Старый 19.07.2013, 12:47   #4
astecenko
Homo Interneticus
Форумчанин
 
Аватар для astecenko
 
Регистрация: 04.03.2011
Сообщений: 611
По умолчанию

таймер обычный вещь не очень точная особенно в плане миллисекунд, тут либо использовать более точную реализацию таймера из директХ, либо просто при старте запомнить в переменную типа TDateTime дату время запуска и когда надо получать разницу между Now и переменной, и декодировать это значение.
astecenko вне форума Ответить с цитированием
Старый 19.07.2013, 15:16   #5
GoriZonTT
Пользователь
 
Регистрация: 12.12.2010
Сообщений: 15
По умолчанию

Цитата:
Сообщение от astecenko Посмотреть сообщение
таймер обычный вещь не очень точная особенно в плане миллисекунд, тут либо использовать более точную реализацию таймера из директХ, либо просто при старте запомнить в переменную типа TDateTime дату время запуска и когда надо получать разницу между Now и переменной, и декодировать это значение.
Да, думал насчет использования системного времени. Но:

1. Мне не важна для задачи точность.
2. Даже если бы была важна очень сильно, я бы скорее его сразу по NTP запрашивал откуда-нибудь.

Вообще я имел в виду какой-нибудь класс-секундомер. Где, например, можно использовать методы:

Код:
       
        int tsecond=0;   //инициализируются в классе
        int tminute=0;   //и могут задаваться динамически.
        int thour=0;     //предположим, что мы их задали

        int Second(int tsecond)
        {
        if (tsecond>=0 and tsecond<60)
                return tsecond;
        else
                {
                tminute++;
                tsecond=0;
                }
        return tsecond;
        }

        int Minute(int tminute)
        {
        if (tminute>=0 and tminute<60)
                return tminute;
        else
                {
                thour++;
                tminute=0;
                }
        return tminute;
        }

        int Hour(int thour)
        {
        if (thour>=0 and thour<60)
                return thour;
        else
                thour=0;

        return thour;
        }

Последний раз редактировалось GoriZonTT; 19.07.2013 в 15:20.
GoriZonTT вне форума Ответить с цитированием
Старый 19.07.2013, 17:49   #6
FataLL
Форумчанин
 
Аватар для FataLL
 
Регистрация: 29.01.2013
Сообщений: 319
По умолчанию

Так что именно надо? Использовать самописный счётчик секунд или вычислить время работы программы? Счётчик - не самый лучший способ. И уж не самый простой точно. GetTickCount рулит. Запомнил количество секунд при старте. Потом берёшь текущее значение и вычитаешь стартовое. Получаешь количество секунд работы программы. Думаю, что перевести из секунд в часы и минуты труда не составит...
FataLL вне форума Ответить с цитированием
Старый 19.07.2013, 18:43   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от FataLL Посмотреть сообщение
GetTickCount рулит. Запомнил количество секунд при старте. Потом берёшь текущее значение и вычитаешь стартовое. Получаешь количество секунд работы программы. Думаю, что перевести из секунд в часы и минуты труда не составит...
+1
Категорически согласен!!!

фактически сам хотел тоже самое предложить.
Данный способ имеет одни плюсы (простота, надёжность, точность, универсальность -хоть на таймер сади, хоть по событию, не загружает систему - загрузка будет идти только на отображение времени работы) и я не вижу недостатков в данном подходе!
p.s. вместо getTickCount можно брать получение системного времени...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.07.2013, 20:48   #8
Stertor
Заблокирован
 
Регистрация: 17.07.2013
Сообщений: 104
По умолчанию

Цитата:
GetTickCount
Правильно. Поддерживаю.
Stertor вне форума Ответить с цитированием
Старый 20.07.2013, 04:21   #9
Nuklon
Форумчанин
 
Аватар для Nuklon
 
Регистрация: 05.04.2012
Сообщений: 134
По умолчанию

Код:
#include <time.h>


class xTimer {
private:
        time_t  start;
        TCHAR  buf[9];
public:
        xTimer(void){
                this->Reset();
        }

        // задание времени
        void   Set(int hour, int minute, int sec) {
                time(&start);
                start  -= (time_t)((hour%24)*3600 + (minute%60)*60 + sec%60);
        }

        // получение времени в виде строки
        TCHAR*  Get(void){
                time_t cur;

                time(&cur);
                cur -= start;
                wsprintf(buf, TEXT("%02d:%02d:%02d"), cur/3600%24, cur/60%60, cur%60);
                return  (TCHAR*)buf;
        }

        // сброс таймера
        void Reset(void) {
                time(&start);
        }
};


//...
xTimer t;
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
       Caption = t.Get();
}
Nuklon вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Монитор включается через время после запуска ПК _PROGRAMM_ Компьютерное железо 3 09.07.2012 14:12
TSR программа через некоторое время после запуска выводит на экран простейший графический объект, позволяя управлять им стрелками. Custom_L.E. Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 17.05.2012 16:26
Время запуска программы Larboss Общие вопросы Delphi 5 06.01.2012 23:44
как сделать проще геннадий522 Общие вопросы C/C++ 36 19.12.2011 14:45
как проще ее написать? 777pro777 Помощь студентам 4 25.10.2011 15:05