Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > Таймер реального времени


Автор: gpepsi 3.2.2012, 21:39
Нужен счетчик реального времени в сек. с возможностью сброса.
Есть ли такой в QT или нужно самому пИсать..

Автор: tzirechnoy 3.2.2012, 21:41
Пишыте лучшэ сами, это строчек 5 через time(NULL)

Автор: gpepsi 3.2.2012, 22:58
Цитата(tzirechnoy @  3.2.2012,  21:41 Найти цитируемый пост)
Пишыте лучшэ сами, это строчек 5 через time(NULL) 

что есть time(NULL)  - win32?

может есть что-то похожее на QElapsedTimer с возможностью сброса ?

Автор: math64 3.2.2012, 23:23
QTime::currentTime(); позволяет узнать текущее время с точностью до миллисекунд, но и time(NULL) работает.
Но так как ни Windows, ни Linux не являются системами реального времени, гарантированно отмерить промежуток времени нельзя.

Автор: boostcoder 3.2.2012, 23:59
time(NULL) - счетчик реального времени. ибо на win/linux платформах читает счетчик секунд BIOS.

Добавлено через 21 секунду
но time(NULL) возвращает секунды.

Автор: gpepsi 4.2.2012, 09:25
Цитата(math64 @  3.2.2012,  23:23 Найти цитируемый пост)
Но так как ни Windows, ни Linux не являются системами реального времени, гарантированно отмерить промежуток времени нельзя. 

да мне не нужна точность.

Вы наверное меня не поняли. Запускается процесс. Нужно посчитать сколько времении он работает в секундах.
Если процесс останавливается, то и счетчик времени работы перестает работать.
А если запускается процесс заново, то счетчик времени обнуляется и начинает считать отсчеты заново.

Автор: borisbn 4.2.2012, 10:02
Цитата(gpepsi @  4.2.2012,  09:25 Найти цитируемый пост)
Запускается процесс. Нужно посчитать сколько времении он работает в секундах.

Код

QTime timeMeasure;
timeMeasure.start();
functionThatDoSomeWork();
qDebug() << "functionThatDoSomeWork took" << timeMeasure.elapsed() << "ms";


Добавлено через 1 минуту и 49 секунд
Цитата(gpepsi @  3.2.2012,  21:39 Найти цитируемый пост)
Есть ли такой в QT

Есть ли таймер QuickTime - не знаю  smile 

Автор: gpepsi 4.2.2012, 12:04
Цитата(borisbn @  4.2.2012,  10:02 Найти цитируемый пост)
QTime timeMeasure;
timeMeasure.start();
functionThatDoSomeWork();
qDebug() << "functionThatDoSomeWork took" << timeMeasure.elapsed() << "ms";

а сбросить его можно, чтоб elapsed возвращал 0 ?

Автор: ksili 4.2.2012, 13:47
Цитата(gpepsi @  4.2.2012,  13:25 Найти цитируемый пост)
Запускается процесс. Нужно посчитать сколько времении он работает в секундах.Если процесс останавливается, то и счетчик времени работы перестает работать.А если запускается процесс заново, то счетчик времени обнуляется и начинает считать отсчеты заново.

Зачем счётчик? Смотришь системное время в начале. Смотришь в конце. Вычисляешь разницу. Всё.

Автор: gpepsi 4.2.2012, 20:55
Цитата(ksili @  4.2.2012,  13:47 Найти цитируемый пост)

Зачем счётчик? Смотришь системное время в начале. Смотришь в конце. Вычисляешь разницу. Всё. 

то, что можно это сделать - понятно. Но если есть готовое решение, то зачем заморачиваться...

Автор: boostcoder 4.2.2012, 21:35
для тех кого гугл забанил: http://www.boost.org/doc/libs/1_48_0/libs/timer/doc/index.html

зы
все же была надежда, что кто-то воспользуется гуглом)

Автор: tzirechnoy 4.2.2012, 22:06
У человека Qt. Зачем ему твой тупой, жырный буст с кривым синтаксисом?

Автор: gpepsi 4.2.2012, 22:14
Цитата(boostcoder @  4.2.2012,  21:35 Найти цитируемый пост)
для тех кого гугл забанил: http://www.boost.org/doc/libs/1_48_0/libs/.../doc/index.html

зы
все же была надежда, что кто-то воспользуется гуглом) 

а что-то я там ничего похожего для себя не нашел...

Автор: boostcoder 4.2.2012, 23:33
Цитата(tzirechnoy @  4.2.2012,  22:06 Найти цитируемый пост)
твой

не мой.

Цитата(tzirechnoy @  4.2.2012,  22:06 Найти цитируемый пост)
жырный 

в разы меньше кути.

Цитата(tzirechnoy @  4.2.2012,  22:06 Найти цитируемый пост)
с кривым синтаксисом

во первых - у тебя просто руки/моцг кривые.
во вторых - синтаксис плюсовый, как и в куте.

Добавлено @ 23:35
Цитата(gpepsi @  4.2.2012,  22:14 Найти цитируемый пост)
ничего похожего

попробуй почитать.

Автор: Sahab 4.2.2012, 23:51
Цитата(tzirechnoy @  4.2.2012,  22:06 Найти цитируемый пост)
У человека Qt. Зачем ему твой тупой, жырный буст с кривым синтаксисом? 

мдя... судя по всему вы на куте "кодите" а не на плюсах...
пичалько)

Автор: boostcoder 4.2.2012, 23:56
Цитата(Sahab @  4.2.2012,  23:51 Найти цитируемый пост)
судя по всему вы на куте "кодите" а не на плюсах...

по моему, это стандартно, для 90% кутешников smile

Автор: Sahab 5.2.2012, 00:10
Цитата(gpepsi @  4.2.2012,  20:55 Найти цитируемый пост)
Цитата(ksili @  4.2.2012,  13:47 )
Зачем счётчик? Смотришь системное время в начале. Смотришь в конце. Вычисляешь разницу. Всё. 

то, что можно это сделать - понятно. Но если есть готовое решение, то зачем заморачиваться... 

а это типа не готовое решение?) нужно тонны кода написать?)

Добавлено через 1 минуту и 30 секунд
Цитата(boostcoder @  4.2.2012,  23:56 Найти цитируемый пост)
по моему, это стандартно, для 90% кутешников

ну я не стал бы так радикально, на этом форуме много людей которые используют Qt а не "кодят" на ней... хотя некая закономерность все же есть.

Автор: tzirechnoy 5.2.2012, 09:41
Цитата
не мой.


Вы, Рабинович, либо ник смените, либо не выступайте так.

Цитата
в разы меньше кути.


Ну да конечно.

0_ilan@nb /home/ilan%apt-cache show libqt4-dev
Package: libqt4-dev
Source: qt4-x11
Version: 4:4.7.4-2
Installed-Size: 16922


0_ilan@nb /home/ilan%apt-cache show libboost1.46-dev
Package: libboost1.46-dev
Source: boost1.46
Version: 1.46.1-8
Installed-Size: 56670

При этом это только ядро в обоих случаях -- и добавок у буста на глаз заметно большэ.

Цитата
во вторых - синтаксис плюсовый, как и в куте.


Я про собственно бустовские традицыи.

Автор: borisbn 5.2.2012, 10:31
tzirechnoy, boostcoder, вот меня всегда интересовал вопрос: вы что, в рюкзаке на себе носите boost или Qt ? Какая разница, сколько места занимает библиотека ? Я ещё понимаю неприязнь framework'ов (.Net, Java, etc.), но тут... набор исходников, lib'ин и dll...

P.S. Упомянутые господа - не ссорьтесь. Набор исходников, lib'ин и dll того не стОят  smile 

Автор: boostcoder 5.2.2012, 10:44
Цитата(tzirechnoy @  5.2.2012,  09:41 Найти цитируемый пост)
Вы, Рабинович, либо ник смените, либо не выступайте так.

забавная аргументация. погугли, что-ли..

Цитата(tzirechnoy @  5.2.2012,  09:41 Найти цитируемый пост)
Ну да конечно.

хз что там за вывод у тебя, но он явно лжет ;)

>du /usr/local/lib/libboost* -ch
>29M total

http://sourceforge.net/projects/boost/files/boost/1.48.0/boost_1_48_0.tar.gz/download: 58.7 MB

>du /usr/lib/i386-linux-gnu/libQt* -ch
>65M total

ftp://ftp.qt.nokia.com/qt/source/qt-everywhere-opensource-src-4.8.0.tar.gz: 228 MB

так что я хз о чем ты...


Цитата(tzirechnoy @  5.2.2012,  09:41 Найти цитируемый пост)
Я про собственно бустовские традицыи.

какие традиции?
как может быть виноват инструмент в том, что ты им пользоваться не умеешь?

Добавлено @ 10:45
borisbn, объем библиотеки меня не заботит, в нынешнее-то время. я просто ответил.

а вообще, не переношу пустозвонов и трепло.

Автор: Sahab 5.2.2012, 17:52
Цитата(tzirechnoy @  5.2.2012,  09:41 Найти цитируемый пост)
Ну да конечно.

0_ilan@nb /home/ilan%apt-cache show libqt4-dev
Package: libqt4-dev
Source: qt4-x11
Version: 4:4.7.4-2
Installed-Size: 16922


0_ilan@nb /home/ilan%apt-cache show libboost1.46-dev
Package: libboost1.46-dev
Source: boost1.46
Version: 1.46.1-8
Installed-Size: 56670

А вы всю кутю с собой таскаете? Не смешите...

А давайте померяем приложение Qt с сетевой частью (консольное) и с boost.asio? Какая разница? То-то.
А вообще по поводу размера - согласен с постом borisbn.


Цитата(tzirechnoy @  5.2.2012,  09:41 Найти цитируемый пост)
Я про собственно бустовские традицыи.

щитовынесете? 
А Вы вообще в курсе что часть буста вошла в стандарт, а некоторая часть чуть ли не скопипасчена в gcc?
И по вашему это делают люди которые любят 
Цитата
тупой, жырный буст с кривым синтаксисом? 
 
или у них просто моцка поболее чем у тех кто не умеет его готовить?

Автор: _GRIN_ 6.2.2012, 18:29
Цитата(ksili @  4.2.2012,  11:47 Найти цитируемый пост)
Зачем счётчик? Смотришь системное время в начале. Смотришь в конце. Вычисляешь разницу. Всё. 

Для систем с ntp-серверами, где автомотическая подводка времени, данное решение будет не правильным.
Правильное решение - QElapsedTimer - или boost-овский вариант - но, признаться я boost не знаю и ничего сказать не смогу.

Автор: gpepsi 7.2.2012, 10:27
Цитата(_GRIN_ @  6.2.2012,  18:29 Найти цитируемый пост)
Правильное решение - QElapsedTimer 

я что-то не нашел как его сбросить

Автор: Sahab 7.2.2012, 11:04
qint64 QElapsedTimer::restart ()

Автор: boostcoder 7.2.2012, 12:14
Цитата(gpepsi @  7.2.2012,  10:27 Найти цитируемый пост)
я что-то не нашел как его сбросить

:facepalm

Автор: gpepsi 8.2.2012, 09:40
Цитата(Sahab @  7.2.2012,  11:04 Найти цитируемый пост)
qint64 QElapsedTimer::restart ()

restart опять пачнет отсчет, а мне этого не нужно.

Поясню, что мне нужно.
Пусть есть процесс. Изначально elapsed должен отдавать 0.
Запускаю таймер - в процессе его работы я должен получать время, сколько он проработал.
Останавливаю процесс. Теперь таймер должен остановиться и показывать время, которое процесс отработал.

Если запустить его заново, то время должно сброситься (restart) и начать осчет заново.

Вот остановить таймер вроде нельзя.

Автор: _GRIN_ 8.2.2012, 10:05
Вот тебе обёртка
Код

#ifndef ELAPSED_TIMER_WRAPPER_H
#define ELAPSED_TIMER_WRAPPER_H

#include <QElapsedTimer>

class CElapsedTimerWrapper
{
    Q_DISABLE_COPY(CElapsedTimerWrapper)
public:
    CElapsedTimerWrapper() : m_is_active(false) {}
    qint64 elapsed()const { return m_is_active ? m_timer.elapsed() : 0; }
    void start() { m_is_active = true; m_timer.restart(); }
    void stop() { m_is_active = false; }

private:
    QElapsedTimer m_timer;
    bool m_is_active;
};
#endif // ELAPSED_TIMER_WRAPPER_H


Вот проверочный код
Код

#include <QDebug>
int main()
{
    CElapsedTimerWrapper timer;
    timer.start();
    usleep(1000*500);
    qDebug() << timer.elapsed();
    timer.start();
    usleep(1000*200);
    qDebug() << timer.elapsed();
    timer.stop();
    usleep(1000*200);
    qDebug() << timer.elapsed();
    timer.start();
    usleep(1000*100);
    qDebug() << timer.elapsed();
    return 0;
}


вот лог
Код

500 
200 
0 
100 

Автор: gpepsi 8.2.2012, 10:08
Цитата(_GRIN_ @  8.2.2012,  10:05 Найти цитируемый пост)
Вот тебе обёртка

после stop он должен возвращать время последней работы

Автор: _GRIN_ 8.2.2012, 10:10
Цитата(gpepsi @  8.2.2012,  08:08 Найти цитируемый пост)
после stop он должен возвращать время последней работы 

Поправил
Код

#ifndef ELAPSED_TIMER_WRAPPER_H
#define ELAPSED_TIMER_WRAPPER_H

#include <QElapsedTimer>

class CElapsedTimerWrapper
{
    Q_DISABLE_COPY(CElapsedTimerWrapper)
public:
    CElapsedTimerWrapper() : m_is_active(false) {}
    qint64 elapsed()const { return m_is_active ? m_timer.elapsed() : m_elapsed; }
    void start() { m_is_active = true; m_timer.restart(); }
    void stop() { m_elapsed = m_timer.elapsed();m_is_active = false; }

private:
    QElapsedTimer m_timer;
    bool m_is_active;
    qint64 m_elapsed;
};

#endif // ELAPSED_TIMER_WRAPPER_H


вывод
Код

501 
200 
200 
100 


Проверочный код тот же

Автор: math64 8.2.2012, 10:15
Цитата(gpepsi @  8.2.2012,  10:08 Найти цитируемый пост)
после stop он должен возвращать время последней работы 

Так запомни его в поле класса и возвращай его из поля класса, когда таймер остановлен.
При запуске таймера можно сбрасывать запомненное значение
При остановке таймера можно сложить прошедшеее время с запомненным, а можно не складывать
А можно хранить отдельно время последнего запуска и суммарное время.

Автор: bsa 8.2.2012, 10:27
gpepsi, а зачем останавливать? просто возьми текущее время и все.
Открою тебе секрет, он не считает. Если упрощенно, то он запоминает при запуске текущее системное время, а потом при каждом запросе делает вычитание его из текущего. Поэтому "остановить" его нельзя.

Автор: boostcoder 8.2.2012, 10:44
Цитата(bsa @  8.2.2012,  10:27 Найти цитируемый пост)
он запоминает при запуске текущее системное время, а потом при каждом запросе делает вычитание его из текущего. 

а разве кто-то думал иначе? оО
сплошной facepalm...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)