Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Таймер в C/c++

9.5K
15 февраля 2006 года
AlexKar
7 / / 02.05.2005
Мне нужно вызывать функцию с интервалом порядка нескольких микросекунд, соответственно SetTimer() использовать бесполезно (минимальный интервал для этой функции порядка нескольких миллисекунд), подскажите пожалуйста чЁ-нибудь:)
2.4K
16 февраля 2006 года
dinasok51
219 / / 12.11.2005
Цитата:
Originally posted by AlexKar
Мне нужно вызывать функцию с интервалом порядка нескольких микросекунд, соответственно SetTimer() использовать бесполезно (минимальный интервал для этой функции порядка нескольких миллисекунд), подскажите пожалуйста чЁ-нибудь:)


С микросекундными интервалами работает multimedia timer см раздел Multimedia Timers в Platform SDK

398
16 февраля 2006 года
Alexandoros
630 / / 21.10.2005
Неа, мультимедиа таймер работает с милисекундами. Как поставить таймер на микросекунды в виндовсе, я не знаю, но как вариант попробуй QuerryPerfomanceCounter.

Код:
LARGE_INTEGER cntbeg, cntend;
    __int64   delay, freq, delaycnt;
   
    delay = 20; //(микросекунд)

    if (!QueryPerformanceFrequency(&freq))
     //error не поддерживается платформой.
        return 1;

    delaycnt = freq.QuadPart * delay / 1000000;
   
    QueryPerformanceCounter(&cntbeg);
    for(QueryPerformanceCounter(&cntend);
        (cntend.QuadPart - cntbegin.QuadPart) < delaycnt;
        QueryPerformanceCounter(&cntend));


Этот код даст задержку на микросекунды, но если ты его будеш в цикле юзать, скорее всего у тебя процик загрузится на 100%.

Я знаю что паузу, без загрузки проца, можно запрограммировать через APIC, но под виндой вряд ли удастся.
2.4K
16 февраля 2006 года
dinasok51
219 / / 12.11.2005
Цитата:
Originally posted by Alexandoros
Неа, мультимедиа таймер работает с милисекундами. Как поставить таймер на микросекунды в виндовсе, я не знаю, но как вариант попробуй QuerryPerfomanceCounter.

Код:
LARGE_INTEGER cntbeg, cntend;
    __int64   delay, freq, delaycnt;
   
    delay = 20; //(микросекунд)

    if (!QueryPerformanceFrequency(&freq))
     //error не поддерживается платформой.
        return 1;

    delaycnt = freq.QuadPart * delay / 1000000;
   
    QueryPerformanceCounter(&cntbeg);
    for(QueryPerformanceCounter(&cntend);
        (cntend.QuadPart - cntbegin.QuadPart) < delaycnt;
        QueryPerformanceCounter(&cntend));


Этот код даст задержку на микросекунды, но если ты его будеш в цикле юзать, скорее всего у тебя процик загрузится на 100%.

Я знаю что паузу, без загрузки проца, можно запрограммировать через APIC, но под виндой вряд ли удастся.



Про микросекунды я действительно загнул.
Но предложение с QueryPerformanceCounter() - это задержка с полной загрузкой процессора.

9.5K
16 февраля 2006 года
AlexKar
7 / / 02.05.2005
Ребята, БОЛЬШОЕ спасибо выручили :}
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог