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

Ваш аккаунт

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

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

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

Баръер в 1 мс

8.0K
30 октября 2007 года
Duality27
49 / / 01.12.2006
Можно ли преодолеть баръер в 1 милисекунду для отчета времени в микросекундах каким-либо способом? TTimer такой возможности не дает
241
30 октября 2007 года
Sanila_san
1.6K / / 07.06.2005
А что за задача стоит? Для чего это?
276
30 октября 2007 года
Rebbit
1.1K / / 01.08.2005
Вот мои мысли в слух, которые могут быть ошибочными или неправильными:

Я не знаю как изнутри роботает ТТаймер. Возможно отслеживает прерывания таймера, но они кажется происходят примерно 12,5 раз в секунду. Ето слишком мало по сравнению с 1000.
Есть такты процессора. И помойму их количество можно узнать командой RDTCS (о чем я тоже не имею никакого представления и никогда такого не делал.) Под досом я бы питался сделать так.
1. Перехватываю преривания таймера.
2. Засекаю количество тактов и жду несколько тиков таймера.
3. считаю, сколько примерно ето милисекунд.
4. Засекаю количество тактов, ищу разницу тактов, читаю сколько тактов на одну милисекунду.
5. пишу подпрограму которая выполняет задержку.
Ето все на асемблере, на котором я только лабы в политехе делал.

Возможна идея неправильная и не реализируемая. Так что простити если что не так.

ЗЫ. Даже если так можно сделать всеровно роботать будет не точно.
Виндовс - не система реального времени и запросто может передать управление другому процесу на неопределенно е время.
241
30 октября 2007 года
Sanila_san
1.6K / / 07.06.2005
С аналогичным успехом можно повесить в другом потоке простой счётчик вида i++, пусть тикает. При помощи TTimer можно отследить среднее время между приращениями. Потом посчитать количество приращений, и буте счастье. Другой вопрос, что Винда потокау выделяет всякий раз разное время, тут возможна ошибка.
276
30 октября 2007 года
Rebbit
1.1K / / 01.08.2005
Цитата: Sanila_san
С аналогичным успехом можно повесить в другом потоке простой счётчик вида i++, пусть тикает. При помощи TTimer можно отследить среднее время между приращениями. Потом посчитать количество приращений, и буте счастье. Другой вопрос, что Винда потокау выделяет всякий раз разное время, тут возможна ошибка.



:) немножко не то. Так придется росчитывать на то что ОС переключится на другой поток, что может и не произойти в течении длительного времени и пройдет очень много тактов процессора.
В моем варианте если при выполнении нашего потока не произойдет переключения на другой, то все будет гладко, если такое произойдет и подпрограма задержки провтыкает окончания милисекунды, она сразу же завершится при передаче ей управления (ну не сразу а после читания количества тактов)
В твоем случае она будет крутится в цыкле пока счетчик в другом потоке не добежыт до нужного значения.

Но думается мне что ето все делать гиморно и должны быть готовые решения.

241
30 октября 2007 года
Sanila_san
1.6K / / 07.06.2005
Мой вариант и правда содержит много оговорок. Я исходил из того узконишевого предположения, что для одинаково сложных задач система выделяет примерно равные промежутки времени. Мой способ на самом деле плох донельзя. Его нельзя использовать. Должно быть готовое решение, наверняка оно есть.
10K
31 октября 2007 года
Vitaliy Boberman
34 / / 24.10.2006
Используй:
QueryPerformanceFrequency
и
QueryPerformanceCounter

это максимум, что можно выдавить из windows
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог