Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Timer в C/C++ 
:(
    Опции темы
AlexKar
Дата 15.2.2006, 23:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 7.12.2005

Репутация: нет
Всего: нет



Мне нужно вызывать функцию с интервалом порядка нескольких микросекунд, соответственно SetTimer() использовать бесполезно (минимальный интервал для этой функции порядка нескольких миллисекунд), подскажите пожалуйста чЁ-нибудьsmile, как это можно сделать.
PM MAIL   Вверх
Daevaorn
Дата 16.2.2006, 00:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



AlexKar,
Смотри QueryPerformanceCounter/QueryPerformanceFrequency в msdn
PM MAIL WWW   Вверх
cardinal
Дата 16.2.2006, 00:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 2
Всего: 99



Цитата(AlexKar @ 15.2.2006, 21:51 Найти цитируемый пост)
нужно вызывать функцию с интервалом порядка нескольких микросекунд

А сколько она сама времени длится?


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
AlexKar
Дата 16.2.2006, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 7.12.2005

Репутация: нет
Всего: нет



Она длится порядка 0,1 микросекунды (поиск методом Фибоначчи в маршрутной таблице), а QueryPerformanceCounter/QueryPerformanceFrequency - это как я понял Win32 API функции?
PM MAIL   Вверх
Dreamer_0x01
Дата 16.2.2006, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Терминатор
**


Профиль
Группа: Участник
Сообщений: 780
Регистрация: 14.4.2005
Где: Санкт-Петербург

Репутация: нет
Всего: 12



ты же этот вопрос поднимал вот десь:
http://forum.vingrad.ru/index.php?showtopic=82663

И там пришли к выводу, что под Windows вроде как не получится.


--------------------
Нет ничего невозможного. Есть цели, и есть время и силы на их достижение.
PM ICQ   Вверх
Ignat
Дата 16.2.2006, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Флудератор
****


Профиль
Группа: Экс. модератор
Сообщений: 4030
Регистрация: 19.4.2004
Где: غيليندزيك مدينة

Репутация: 3
Всего: 73



Цитата(AlexKar @ 15.2.2006, 23:51 Найти цитируемый пост)
Мне нужно вызывать функцию с интервалом порядка нескольких микросекунд,

Тебе таймер, для синхронизации нужен, или просто организовать простои с необязательно равными промежутками?
Если второе, то кажется проблему разрешить на низком уровне.
Т.е. на асме написать цикл NOP'ов, по окончании взывать прерывание. Это должно давать малую паузу, без нагрузки на проц (поправьте ежель не прав). Но это уже обсуждать в разделе асм.
Добавлено @ 13:32
Dreamer_0x01, а по ссылке про железку в слот - мысль


--------------------
Теперь при чем :P
PM   Вверх
threef
Дата 16.2.2006, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 27.10.2005
Где: Запорожье

Репутация: 9
Всего: 10



Стандартный таймер не подойдет. Можешь сделать свой, основанный на тактах процессора. http://forum.vingrad.ru/index.php?showtopi...st&p=638492
PM MAIL   Вверх
AlexKar
Дата 16.2.2006, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 7.12.2005

Репутация: нет
Всего: нет



Я почитал Рихтера, и нашел такой способ:

Код

    LARGE_INTEGER cntbeg, cntend, freq;
   __int64  delaycnt;
   
    

    if (!QueryPerformanceFrequency(&freq))
     //error не поддерживается платформой.
        return 1;

    delaycnt = freq.QuadPart/ROUTFREQ; //ROUTFREQ-частота повторения операции
    
    QueryPerformanceCounter(&cntbeg);

    for(QueryPerformanceCounter(&cntend);
        (cntend.QuadPart - cntbeg.QuadPart) < delaycnt;
        QueryPerformanceCounter(&cntend));   

Этот код дает нужную задержку, единственный trouble, это, когда я его использую в цикле, проц загружается на 100%
PM MAIL   Вверх
_hunter
Дата 17.2.2006, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 16
Всего: 98



выноси код в отдельный поток.
+ а что ты хотел -- выполнять код примерно 1000000 раз в секунду -- это дает определенную нагрузку...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1045 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.