Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: мультимедийные таймеры  (Прочитано 15153 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« : 21-02-2011 08:57 » 

почему так:

timeSetEvent - работает как надо. Но один интересный момент:
http://msdn.microsoft.com/en-us/library/dd757634(VS.85).aspx

тут есть оговорка, что
Note  This function is obsolete. New applications should use CreateTimerQueueTimer to create a timer-queue timer.

я попробовал с ним:

Код:
class CMulMedTimer
{
HANDLE m_h;

std::vector<DWORD> v;

public:

//static __stdcall void pf(void*,unsigned char)
static VOID NTAPI pf(PVOID pContext, BOOLEAN )
{
CMulMedTimer* pThis=(CMulMedTimer*)pContext;

pThis->v.push_back(GetTickCount());

if(pThis->v.size()>100)
{
int iii=1;
}


}

CMulMedTimer()
{
m_h=0;
}

~CMulMedTimer()
{
stop();
}

bool start()
{
m_h=0;

enum{e_period=10,};

if(!::CreateTimerQueueTimer(&m_h,0,pf,this,e_period,e_period,WT_EXECUTEINTIMERTHREAD))
{
m_h=0;
}

return m_h!=0;
}

void stop()
{
if(m_h)
{
::DeleteTimerQueueTimer(0,m_h,0);

}

}
};

Цитата
      
  •    18685718
  • [1]   18685734
          [2]   18685750
          [3]   18685765
          [4]   18685781
          [5]   18685796
          [6]   18685812
          [7]   18685828
          [8]   18685843
          [9]   18685859
          [10]   18685875
          [11]   18685890
то есть, работает он не точнее WM_TIMER

почему ?
Записан

Джон
просто
Администратор

de
Online Online
Пол: Мужской

« Ответ #1 : 21-02-2011 09:14 » 

Лёш, тут может быть много причин. Мультипроцессорнось, Hiper Threading, загруженность системы и тд и тп. Не исключено, что в нормальных одинаковых уловиях они практически ничем не отличаются.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #2 : 21-02-2011 09:31 » 

А зачем тогда они написали - устаревшая ? Ведь это не одно и тоже тогда
Записан

Джон
просто
Администратор

de
Online Online
Пол: Мужской

« Ответ #3 : 21-02-2011 10:31 » 

Ну почему? Те же программу пишешь? А накой системе она будет работать? С каким API?

Понимаешь, наличие, например, мультипроцессоров ещё не означает, что ТВОЯ программа будет их использовать. В С++, например, "нудный" код нужно брать в специальные директивы. Я думаю, что "новые" ф-ции/объекты тоже делают нечто подобное. С этой точки зрения, старые ф-ции именно "устаревшие", поскольку не расчитаны на работу с новинками API. Другой впрос, насколько они совместимы со старыми версиями. Ну ещё одна проблемка, недавно вроде как обсуждали, что новые ф-ции могут быть просто алиасами старых.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Dale
Блюзмен
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 21-02-2011 11:20 » 

А зачем тогда они написали - устаревшая ?

Предупреждают, что в следующих версиях функция поддерживаться не будет. Если код не сиюминутный, а планируется для длительного использования, вызовов таких функций следует избегать.
Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #5 : 21-02-2011 11:54 » 

хе хе хе... Всё в той же сылке:

Цитата
Rumors of the death of timeSetEvent() seem to be exaggerated
Although the timeSetEvent() API call has been officially deprecated for some time, it still seems to be the only reliable, high-resolution timer available in Windows. I (and lots of other folks: http://cboard.cprogramming.com/windows-programming/104677-createtimerqueuetimer.html) have tried using the recommended CreateTimerQueueTimer(), but the behavior is simply not the same, and does not seem to work as reliably. I've reluctantly returned to using timeSetEvent().

Джон, а при чём тут мультипроцессор ?
Записан

Джон
просто
Администратор

de
Online Online
Пол: Мужской

« Ответ #6 : 21-02-2011 13:36 » 

К примеру.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #7 : 21-02-2011 15:03 » 

ну как бы вот все тоже говорят, что пользуются именно этим таймером (например, в играх - для стабильной FPS )

Ставил эксперимент: 1 мс отлично держит. GetTickCount, выводимый в дебаг, повторяется по 16 раз (ожидаемо)
Записан

Джон
просто
Администратор

de
Online Online
Пол: Мужской

« Ответ #8 : 21-02-2011 16:39 » 

Лёш, я имел ввиду современные технологии, которых не было раньше, точнее, под которые API раньше не было заточено.
Те чтобы произвести объективный замер, тебе надо использовать различное железо с различной нагрузкой. Запусти много процессов, нагрузи комп конкретно, а потом измеряй.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #9 : 21-02-2011 16:45 » 

если это единственный способ запустить такой таймер - то тут хоть замеряй, хоть не замеряй Улыбаюсь Потом поэкспериментирую
Записан

Ochkarik
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #10 : 21-02-2011 17:04 » 

Цитата
Поверье четвертое. timeBeginPeriod() предназначена для изменения разрешения таймеров

Если прочитать описание функции timeBeginPeriod() в MSDN, то ни за что не догадаться, что на самом деле она изменяет quantum.

Функция timeBeginPeriod(1) призвана повысить разрешение multimedia и waitable timers до 1ms. На самом деле, таймеры обрабатываются планировщиком, и их события не могут возникнуть чаще, чем планировщик получает управление. Понижая quantum до 1ms, мы позволяем планировщику более точно вызывать события таймера.
http://www.dtf.ru/articles/read.php?id=39888&page=2
почему - в той же статье чуть выше. ну то есть не конкретно про функцию а на примерах...
« Последнее редактирование: 21-02-2011 17:10 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #11 : 21-02-2011 17:55 » 

Ochkarik, классная статья, спасибо Улыбаюсь Теперь я, даже не проверяя, уже понимяу, почему CreateTimerQueueTimer вёл себя "неправильно"
Завтра на работе провентилирую )
Записан

Ochkarik
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #12 : 21-02-2011 20:30 » 

Алексей1153++, не за что) автору спасибо - статья шикарная)
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #13 : 22-02-2011 05:13 » new

да )
Записан

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

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines