Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
220v_Progressor
Зарегистрирован: 08.04.2004 Сообщения: 2 Откуда: Барнаул
|
Добавлено: Вт Апр 13 2004 12:39 Заголовок сообщения: Задержка (<1мс) в WinXP на VisualC++ |
|
|
Проблема в том, что в LPT-порт (драйвер для порта я уже достал) нужно подать сигнал длительностью в несколько микросекунд. Возможно ли такое осуществить под Windows Xp и как это реализовать на Visual C++. _________________ Don't worry, be happy ! |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
GREA
Зарегистрирован: 14.05.2003 Сообщения: 758 Откуда: Новосибирск
|
Добавлено: Пт Апр 16 2004 19:40 Заголовок сообщения: |
|
|
Если не ошибаюсь, минимальная задержка через системный таймер = 56 миллисекунд. Уменьшить, я думаю можно, эмулировав таймер, какими-либо вычислениями, скорость котрых известна (Посчитать количество операций в секунду и поделить на 1000. Потом производить сколько надо операций для задержки). |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
AlexNor Гость
|
Добавлено: Сб Апр 17 2004 23:57 Заголовок сообщения: |
|
|
Windows не является системой реального времени... со всеми вытекающими. Можно конечно попробовать (как писал GREA) и возможно на быстрых компах будет работать. Но если каой-нить системный процесс начнёт нистого ни с сего жрать кучу процессорного времени то прога корректно работать перестанет Скорее всего тебе стоит написать свой драйвер - станеш системным процессом ... |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
GREA
Зарегистрирован: 14.05.2003 Сообщения: 758 Откуда: Новосибирск
|
Добавлено: Вс Апр 18 2004 19:49 Заголовок сообщения: |
|
|
Тогда можно адаптивно попробовать.
То есть, вычислять задержки через некоторые промежутки, или вообще параллельно. |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
Гость
|
Добавлено: Вт Апр 20 2004 08:47 Заголовок сообщения: |
|
|
Цитата: | Уменьшить, я думаю можно, эмулировав таймер, какими-либо вычислениями |
Если я правильно понял, то нужно реализовать цикл, состоящий простых команд (что-нибудь типа инкремента). Но как узнать сколько тактов выполняется такая команда ?
Цитата: | Скорее всего тебе стоит написать свой драйвер |
А вот этого я не умею. Даже не знаю с какого конца взяться
Цитата: | Тогда можно адаптивно попробовать.
То есть, вычислять задержки через некоторые промежутки, или вообще параллельно. |
Не совсем понял. Если можно, напишите, пожалуйста подробнее. ![Question](images/smiles/icon_question.gif) |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
GREA
Зарегистрирован: 14.05.2003 Сообщения: 758 Откуда: Новосибирск
|
Добавлено: Вт Апр 20 2004 20:05 Заголовок сообщения: |
|
|
Ну так ты сам предлжил инкремент.
Допустим, после одной секунды у тебя в счетчике получилось 2000 (утрирую). Тогда в миллисекунду будет 2 инкремента.
В десяти мс будет уже 20. Ну, идею понял, надеюсь.
Адаптивно - значит, через некоторые промежутки времени, пересчитывать значения счетчика (не обязательно ждать секунду. Можно посчитать, сколько инкрементов за 56 миллисекунд (аппаратный минимум таймера) Будет незаметно).
Кстати, когда будешь циклить инкремент, учитывай еще операции сравнения цикла. Они тоже съедают время. |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
220v_Progressor
Зарегистрирован: 08.04.2004 Сообщения: 2 Откуда: Барнаул
|
Добавлено: Ср Апр 21 2004 08:32 Заголовок сообщения: |
|
|
Понял! Спасибо за совет. ![Very Happy](images/smiles/icon_biggrin.gif) _________________ Don't worry, be happy ! |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
Antonet Гость
|
Добавлено: Ср Апр 21 2004 20:14 Заголовок сообщения: |
|
|
Есть такая WinAPI-шная функция QueryPerformanceCounter . Можно сделать задержку, ориентируясь на этот счетчик. Информацию по этой функции смотри в MS SDK. |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
|