Russian Qt Forum

Qt => Общие вопросы => Тема начата: Vld2 от Июль 26, 2008, 13:03



Название: (Микро vs милли)секунда ???
Отправлено: Vld2 от Июль 26, 2008, 13:03
(Микро vs милли)секунда ???
QT поддерживает миллисекунды, а микросекунды в пролете. Насколько это оправдано пользоватся миллисекундами вместо микросекунд, если нужна точность по времени?


Название: Re: (Микро vs милли)секунда ???
Отправлено: lit-uriy от Июль 26, 2008, 13:14
точность зависит от ОСьки, а не от Qt'ей, если ОСька не обеспечивает мкс-ную точность, то и в Qt'ях она бессмысленна


Название: Re: (Микро vs милли)секунда ???
Отправлено: lit-uriy от Июль 26, 2008, 13:20
у Макса Шлее приведены такие цифры точности:
Win98 - 55мс
остальные ОС - ~1мс
--
мкс рядом не стояли


Название: Re: (Микро vs милли)секунда ???
Отправлено: Admin от Июль 26, 2008, 23:18
мкс вы сможете обеспечить только при наличии платы генерящей прерывания
да и то - OS у нас многозадачная


Название: Re: (Микро vs милли)секунда ???
Отправлено: Alex03 от Июль 28, 2008, 10:14
мкс вы сможете обеспечить только при наличии платы генерящей прерывания
Прерывания тут не при чём. Даже с обычным AT-шным железом таймера настроенным на 55мс (18Гц прерывания) можно читая его регистры получить большую точность, вплоть до частоты/периода тактирования этого таймера (ну или частоты выхода с предделителя, если он есть).
Во вторых современные процы имеют внутренний счётчик тактов, а ОС-ы при загрузке вычисляют (узнают) тактовую частоту, и имеют довольно точные функции получения временных отсчётов (без привязки к глобальному времени/часам реального времени)
Цитировать
да и то - OS у нас многозадачная
А это уже к вопросу а зачем автору топика нужны эти микросекунды.

Ну и в третьих микросекунды кое где в Qt наружу вылазят:
QThread::usleep(unsigned long usecs)
Хотя конечно гарантии что сон будет именно заданное кол-во микросекунд - нет, но то что не меньше - эт точно. :)
В винде так:
Код:
void QThread::usleep(unsigned long usecs)
{
    ::Sleep((usecs / 1000) + 1);
}
:)

Vld2 Какая именно тебе нужна точность по времени то?


Название: Re: (Микро vs милли)секунда ???
Отправлено: Admin от Июль 28, 2008, 10:50
еще как вариант
бесконечный цикл а в нем получение счетчика тактов CPU
достаточно точно - если еще процессу приоритет задрать


Название: Re: (Микро vs милли)секунда ???
Отправлено: Vld2 от Июль 30, 2008, 23:24
Какая именно тебе нужна точность по времени то?
25 мкс
Подскажите виндосовскую функцию получения микросекунд.


Название: Re: (Микро vs милли)секунда ???
Отправлено: Spicos от Июль 31, 2008, 05:28
Код:
// TimerEvent.cpp: implementation of the CTimerEvent class.
//
//////////////////////////////////////////////////////////////////////
#include "mbu.h"
#include "MMTimer.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CTimerEvent::CTimerEvent()
{
        m_uTimerID=NULL;

}

CTimerEvent::~CTimerEvent()
{

        Kill();
}


BOOL CTimerEvent::Kill()
{

        MMRESULT mmResult;
    if (NULL==m_uTimerID) {
                return TRUE;
        }
       
        mmResult=timeKillEvent(m_uTimerID);
        timeEndPeriod(1);
        if (TIMERR_NOERROR==mmResult) {
                m_uTimerID=NULL;
                return TRUE;
        }
        else {
                return FALSE;
        }

}

//Timer event type. The following values are defined:

//TIME_ONESHOT

//Event occurs once, after uDelay milliseconds.

//TIME_PERIODIC

BOOL CTimerEvent::Start(UINT uDelay, UINT uEventType)
{

        if (TIMERR_NOERROR==timeBeginPeriod(1)) {
                m_uTimerID=timeSetEvent(uDelay,0,TimerProcedure,(DWORD)this,uEventType);
                if (NULL==m_uTimerID) {
                        timeEndPeriod(1);
                        return FALSE;
                }
                else {
                        return TRUE;
                }

        }
        else {
                return FALSE;
        }

}

void CALLBACK CTimerEvent::TimerProcedure(UINT uID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2)
{
CTimerEvent* pTimerObject=(CTimerEvent*)dwUser;
pTimerObject->TimerFunction();
}

// TimerEvent.h: interface for the CTimerEvent class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_TIMEREVENT_H__733DF4C1_4095_11D1_8FE8_D6184AA51F0B__INCLUDED_)
#define AFX_TIMEREVENT_H__733DF4C1_4095_11D1_8FE8_D6184AA51F0B__INCLUDED_


//Multimidia functions 
#include <mmsystem.h>


class CTimerEvent 
{
public:
BOOL Start(UINT uDelay, UINT uEventType);
BOOL Kill();
CTimerEvent();
virtual ~CTimerEvent();

private:
MMRESULT m_uTimerID;
static void CALLBACK TimerProcedure(UINT uID,UINT uMsg,DWORD dwUser,DWORD dw1,DWORD dw2);
protected:
virtual void TimerFunction()=0;
};


#endif // !defined(AFX_TIMEREVENT_H__733DF4C1_4095_11D1_8FE8_D6184AA51F0B__INCLUDED_)

сори это про мили, где в справочнике про Win32API видел, но там все так мутно описано.


Название: Re: (Микро vs милли)секунда ???
Отправлено: Alex03 от Июль 31, 2008, 06:41
25 мкс
Подскажите виндосовскую функцию получения микросекунд.
Нужны интервалы/паузы с такой точностью или текущие значения времени/некоего_счётчики (например для регистрации времени некоторых событий)?


Название: Re: (Микро vs милли)секунда ???
Отправлено: Alex03 от Июль 31, 2008, 06:57
Возможно помогут:
Код:
QueryPerformanceCounter()
QueryPerformanceFrequency()
Но вот только счётчики эти в процах появились в первых пнях (если мне память не изменяет).


Название: Re: (Микро vs милли)секунда ???
Отправлено: Vld2 от Август 11, 2008, 23:16
Нужны интервалы/паузы с такой точностью или текущие значения времени/некоего_счётчики (например для регистрации времени некоторых событий)?
делаю регистрацию сообщени, но эти сообщения быстро устаревают, нужна мах точность, например - данные о летящих самолетах


Название: Re: (Микро vs милли)секунда ???
Отправлено: lit-uriy от Август 11, 2008, 23:28
это на аппаратуре делать надо и с нее журнал получать. а то самолеты после тебя летать перестанут :)


Название: Re: (Микро vs милли)секунда ???
Отправлено: Alex03 от Август 12, 2008, 05:36
Точное время умеют давать GPS модули, притом есть такие, которые только время и говорят с точностью порядка 15 нс.
Другое дело как это в комп завести.... :)


Название: Re: (Микро vs милли)секунда ???
Отправлено: Пантер от Август 12, 2008, 07:28
Если нужна такая точность, то нужна и другая операционная система. ОС реального времени.


Название: Re: (Микро vs милли)секунда ???
Отправлено: lit-uriy от Август 12, 2008, 07:41
Другое дело как это в комп завести.... :)
ну вот такую тему и заводи на форуме, всяк полезней. я так понимаю они по USB работают.


Название: Re: (Микро vs милли)секунда ???
Отправлено: Alex03 от Август 12, 2008, 12:34
Другое дело как это в комп завести.... :)
ну вот такую тему и заводи на форуме, всяк полезней. я так понимаю они по USB работают.
lit-uriy Мне оно не надо, я так до конца и не понял что топикСтартеру Vld2 надо.
Толи абсолютное точное дата-время в любой момент времени для регистрации неких событий,
толи "относительные" засечки точного времени (которые могут быть в и неких попугаях),
толи.... какие самолёты, и при чём тут самолёты....


Название: Re: (Микро vs милли)секунда ???
Отправлено: Vld2 от Август 14, 2008, 20:49
нужно абсолютное точное дата-время в любой момент времени