Russian Qt Forum
Ноябрь 25, 2024, 08:20 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: (Микро vs милли)секунда ???  (Прочитано 14400 раз)
Vld2
Гость
« : Июль 26, 2008, 13:03 »

(Микро vs милли)секунда Непонимающий
QT поддерживает миллисекунды, а микросекунды в пролете. Насколько это оправдано пользоватся миллисекундами вместо микросекунд, если нужна точность по времени?
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #1 : Июль 26, 2008, 13:14 »

точность зависит от ОСьки, а не от Qt'ей, если ОСька не обеспечивает мкс-ную точность, то и в Qt'ях она бессмысленна
Записан

Юра.
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #2 : Июль 26, 2008, 13:20 »

у Макса Шлее приведены такие цифры точности:
Win98 - 55мс
остальные ОС - ~1мс
--
мкс рядом не стояли
Записан

Юра.
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #3 : Июль 26, 2008, 23:18 »

мкс вы сможете обеспечить только при наличии платы генерящей прерывания
да и то - OS у нас многозадачная
Записан
Alex03
Гость
« Ответ #4 : Июль 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 Какая именно тебе нужна точность по времени то?
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #5 : Июль 28, 2008, 10:50 »

еще как вариант
бесконечный цикл а в нем получение счетчика тактов CPU
достаточно точно - если еще процессу приоритет задрать
Записан
Vld2
Гость
« Ответ #6 : Июль 30, 2008, 23:24 »

Какая именно тебе нужна точность по времени то?
25 мкс
Подскажите виндосовскую функцию получения микросекунд.
« Последнее редактирование: Июль 30, 2008, 23:27 от Vld2 » Записан
Spicos
Гость
« Ответ #7 : Июль 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 видел, но там все так мутно описано.
« Последнее редактирование: Июль 31, 2008, 12:37 от pastor » Записан
Alex03
Гость
« Ответ #8 : Июль 31, 2008, 06:41 »

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

Возможно помогут:
Код:
QueryPerformanceCounter()
QueryPerformanceFrequency()
Но вот только счётчики эти в процах появились в первых пнях (если мне память не изменяет).
Записан
Vld2
Гость
« Ответ #10 : Август 11, 2008, 23:16 »

Нужны интервалы/паузы с такой точностью или текущие значения времени/некоего_счётчики (например для регистрации времени некоторых событий)?
делаю регистрацию сообщени, но эти сообщения быстро устаревают, нужна мах точность, например - данные о летящих самолетах
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #11 : Август 11, 2008, 23:28 »

это на аппаратуре делать надо и с нее журнал получать. а то самолеты после тебя летать перестанут Улыбающийся
Записан

Юра.
Alex03
Гость
« Ответ #12 : Август 12, 2008, 05:36 »

Точное время умеют давать GPS модули, притом есть такие, которые только время и говорят с точностью порядка 15 нс.
Другое дело как это в комп завести.... Улыбающийся
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #13 : Август 12, 2008, 07:28 »

Если нужна такая точность, то нужна и другая операционная система. ОС реального времени.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #14 : Август 12, 2008, 07:41 »

Другое дело как это в комп завести.... Улыбающийся
ну вот такую тему и заводи на форуме, всяк полезней. я так понимаю они по USB работают.
Записан

Юра.
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.108 секунд. Запросов: 23.