Всем привет.
Есть задача - разработать упрощённый секвенсор реального времени. Программу, которая бы вызывала запрограммированные события с максимальной точностью по времени, допустимая погрешность - миллисекунды. С возможностью перемотки в любое место последовательности повторного воспроизведения. Единственные доступные часы - системные, выдающие время с точностью до наносекунд.
Основная проблема в том, что никто не гарантирует нашей программе real-time scheduling. Пускай мы вызываем gettimeofday(); usleep(100); gettimeofday() - нет никакой гарантии, что между вызовами действительно прошло 100 миллисекунд. Во время usleep() приложение могло быть заторможено свапом, работой мусоросборщика, могло быть засуспенжено через SIGSTOP, наконец. Как в таких условиях обеспечить равномерно «ползущий» указатель проигрывания (так называемый playhead)? Пока что придумалось следующее:
1. Установить разрешение, например, 25ms.
2. Вызывать usleep(25) в цикле, запоминая показания gettimeofday().
3. Если реально прошедшее время (полученное вычитанием показаний gettimeofday) похоже на правду, то есть не сильно отличается от 25ms, то мы полагаем, что наш scheduling стабилен, и даём соответствующее приращение позиции playhead.
4. Если реально прошедшее время сильно отличается от 25ms, то, значит, приложение было заторможено, и scheduling дестабилизировался. В этом случае мы просто ничего не делаем, и надеемся на стабилизацию в следующих циклах.
Извне это будет выглядеть как пауза в проигрывании при наступлении тяжёлых внешних условиях (свап, GC, остановка по SIGSTOP, гибернация) и возобновление при восстановлении нормального течения времени. Может, кто-то предложит вариант получше? Спасибо.
P.S. Исходные тексты Qtractor, Rosegarden и т.п. у меня есть, но ковыряться в них довольно затратно. Может, быстрее разберёмся сами.
Ответ на:
комментарий
от anonymous
Ответ на:
комментарий
от AptGet
Ответ на:
комментарий
от Ochkarik
Ответ на:
комментарий
от anonymous
Ответ на:
комментарий
от AptGet
Ответ на:
комментарий
от Ochkarik
Ответ на:
комментарий
от arsi
Ответ на:
комментарий
от shimon
Ответ на:
комментарий
от Ochkarik
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум sequence пакетов (2008)
- Форум realtime json (2017)
- Форум Realtime statistics (2014)
- Форум realtime-privileges (2024)
- Форум CUDA RealTime (2009)
- Форум realtime grep (2008)
- Форум Realtime backup (2006)
- Новости Realtime Java (2005)
- Форум RealTime processing (2005)
- Форум ищу midi sequencer (2014)