Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 268, средняя оценка - 4.81
Dweyn
0 / 0 / 0
Регистрация: 28.12.2008
Сообщений: 5
#1

Задержка в микроседундах - C++

14.01.2009, 19:55. Просмотров 36198. Ответов 20
Метки нет (Все метки)

Подскажите,можно ли как-нибудь сделать задержку в 30-40 микросекунд?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.01.2009, 19:55
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Задержка в микроседундах (C++):

Задержка - C++
Использую MinGW через NetBeans. Проблема состоит в том что такие команды как cin.get или же getchar() судя по всему игнорируются...

Задержка в цикле на С - C++
Доброго времени суток! Подскажите как в консольном Борланде на С сделать пацзц в цикле, что бы выводимая информация была читабельна?

Задержка в цикле for - C++
Здравствуйте. Имеется вот такая вот рабочая подпрограмма : void led_per(uint16_t n_led) { ...

Задержка в приложении - C++
Привет всем ) подскажите пожалуйста что можно использовать в виде задержки в приложении вместо sleep так как если его использовать...

Задержка времени - C++
Здравствуйте! Мне необходимо сделать задержку времени, чтобы перемещение элемента было помедленнее. Пробовала использовать Sleep(), но...

Задержка и язык. - C++
У меня в конце консольных приложениях появляется задержка "Для продолжения..." и изначально русский язык, как убрать это?

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Mecid
680 / 229 / 4
Регистрация: 15.10.2007
Сообщений: 1,247
14.01.2009, 20:33 #2
C++
1
2
3
4
5
#include <windows.h>
int main(){
Sleep(40);
return 0;
}
Dweyn
0 / 0 / 0
Регистрация: 28.12.2008
Сообщений: 5
14.01.2009, 20:40  [ТС] #3
Цитата Сообщение от Mecid Посмотреть сообщение
C++
1
2
3
4
5
#include <windows.h>
int main(){
Sleep(40);
return 0;
}
Это задержка в 40 МИЛЛИсекунд,нада в МИКРОсекундах.
maximus09
32 / 32 / 3
Регистрация: 29.12.2008
Сообщений: 75
14.01.2009, 20:42 #4
При программировании в Windows помогает API-функция Sleep.

Заголовочный файл winbase.h

Синтаксис
void Sleep(DWORD dwMilliseconds);
DWORD SleepEx(IN DWORD dwMilliseconds, IN BOOL bAlertable);

Однако под DOS и консольных приложений я таких функций не знаю.

Может помочь следующее (я проверял на консоле в Borland С++ Builder 6).

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include   <dos.h>
 
int main(int argc, char* argv[])
{
    struct  time t1,t2;
 
    gettime(&t1);
 
    do{
        gettime(&t2);
    }while((t2.ti_hund - t1.ti_hund)<3);
 
 
    return 0;
}
Структура time возвращает текущее системное время. Элемент ti_hund - сотые доли секунды.

Программа запрашивает системное время до входа в цикл и при каждом повторении цикла. Как только эти значения станут отличаться на 3 сотых секунды (30 милисекунд), произойдет выход из цикла.
Dweyn
0 / 0 / 0
Регистрация: 28.12.2008
Сообщений: 5
14.01.2009, 20:50  [ТС] #5
Ну дык это тоже МИЛЛИсекунды.
Ensase
Флудер
191 / 29 / 5
Регистрация: 23.03.2007
Сообщений: 335
14.01.2009, 21:18 #6
для нано и микро секундных задержек используется либо мультимедиа таймер из winmm, либо ассемблерная инструкция rdtsc (количество тиков).
если нужно позже прикреплю модули для калибровки и задержек этими способами
maximus09
32 / 32 / 3
Регистрация: 29.12.2008
Сообщений: 75
14.01.2009, 21:28 #7
При программировании в Windows столь короткие задаржки ты никогда не сделаешь. Там даже таймеры рекомендуют для большой точности брать с интервалом в 2 секунды (не меньше), хотя документально они обеспечивают милисекундную точность.

Если работаешь напрямую с процессором (на ассемблере), старайся считать количество тактов, затраченное навыполнение какой-то конкретной операции. Иного пути я не знаю.
Dweyn
0 / 0 / 0
Регистрация: 28.12.2008
Сообщений: 5
14.01.2009, 21:31  [ТС] #8
Понял,спасибо,буду думать как обойтись без задержек.
Ensase
Флудер
191 / 29 / 5
Регистрация: 23.03.2007
Сообщений: 335
14.01.2009, 21:48 #9
нормально все реализуется нечего глупости говорить.
например у Щупака в книге все отлично описано
Ensase
Флудер
191 / 29 / 5
Регистрация: 23.03.2007
Сообщений: 335
15.01.2009, 11:38 #10
см. вложение
Вложения
Тип файла: rar timers.rar (47.4 Кб, 1079 просмотров)
Mecid
680 / 229 / 4
Регистрация: 15.10.2007
Сообщений: 1,247
16.01.2009, 18:05 #11
Можно использовать заднржку милисекунду,микро даже не даст результат
Ensase
Флудер
191 / 29 / 5
Регистрация: 23.03.2007
Сообщений: 335
16.01.2009, 19:05 #12
2Mecid
никаких проблем
во вложений модули позволяют делать микро задержки
maximus09
32 / 32 / 3
Регистрация: 29.12.2008
Сообщений: 75
16.01.2009, 20:11 #13
Очень не хотелось бы, чтобы мой вопрос выглядел как провокационный, но все же.

Уважаемый Ensase, откуда вы знаете, что получаются именно задаержки в 30 микросекунд. Вы их точно измеряли, или доверились Щупаку?

Я уже говорил выше, что подсчет количества тактов микропроцессора - самый оптимальный способ организовать столь малые задержки. Вы же, в подтверждение этих слов представили примеры кода. За что вам огромное спасибо. Однако обеспечится ли реально для многопроцессной системы Windows задержка именно в 30 микросекунд. Если вы уверены в этом, расскажите, пожалуйста, каким образом вам удалось обнаружить столь короткую задержку (если, конечно, это не секрет)?

P.S.
Я уже рассказывал о таймерах, которые считают с точностью до милисекунд, но на практике минимальный интервал, который имеет смысл задавать для них - это полсекунды, а самая лучшая синхронизация с реальным временем достигается, когда их интервал равен 1 - 2 секундам (в зависимости от количества одновременно выполняющихся в Windows процессов).
Ensase
Флудер
191 / 29 / 5
Регистрация: 23.03.2007
Сообщений: 335
16.01.2009, 21:32 #14
при программировании спектрометра работал с ацп и шаговым двигателем практически в реальном времени (с высоким приоритетом) задержки после пересчета составляют даже менее 30 микро.
хотя, разумеется ввиду того что windows os не реального времени приходилось следить за загрузкой цп
пользовался схемой с использованием rdtsc
Scout
0 / 0 / 0
Регистрация: 22.01.2009
Сообщений: 6
23.01.2009, 18:16 #15
посмотри http://www.cyberforum.ru/delphi-begi....html?posted=1
будем бороться вместе.

Добавлено через 18 часов 34 минуты 17 секунд
Цитата Сообщение от Ensase Посмотреть сообщение
timers.rar
пардон... я, как начинающий самоучка не въезжаю. это, наверное, на С?
Нельзя ли поподробнее -
1. какой наикоротейшей задержки удалось добиться
2. тесты может выложишь в ехе?
3. и можешь ли сделать таймеры в осх компоненты?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.01.2009, 18:16
Привет! Вот еще темы с ответами:

Задержка вывода - C++
а подскажите как сделать типа цикл но чтобы другая цифра появлялась через секунду Для решения своих проблем создавайте отдельные темы,...

Задержка экрана - C++
Какой командой задерживается окно программы, для того чтобы вылетал в окно эдитора после нажатия любой клавиши, или Enterа?

задержка времени - C++
Господа програмисты не подскажите как задержать программу на определённое время.если можно самый примитивный исходник.заранее огромное...

Задержка итерации цикла - C++
Имеется такая задача: Написать программу на С/С++, которая после запуска считает в отдельном потоке от 0 до 100, при этом каждая итерация...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
23.01.2009, 18:16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru