The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Как получить высокоточные временные задержки not busy-wait"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Как получить высокоточные временные задержки not busy-wait" 
Сообщение от masta Искать по авторуВ закладки(ok) on 10-Дек-05, 00:38  (MSK)
Программирую под QNX, весь код на 90% POSIX-совместимый. По ходу в программе надо делать высокоточные задержки (кратные ХОТЯ БЫ 10мксек). Переопределение системного тика до требуемых величин (порядка 10-40 мксек) убивает живучесть системы, а использование блокирующих busy-wait функций (nanospin...) также нагружает машину (контроллер 300Mhz), тогда как suspend-thread функции (usleep, nanosleep,...) завязаны на тик и естественно дают задержку всегда более одного системного тика. Есть ли способ получить высокоточную задержку (10мксек минимально - ...) и неблокировать при этом поток, а suspend его, или альтернативы какие-нибудь. заранее благодарен.
  Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]

1. "Как получить высокоточные временные задержки not busy-wait" 
Сообщение от kir Искать по авторуВ закладки(??) on 10-Дек-05, 23:12  (MSK)

http://qnx.org.ru/

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Как получить высокоточные временные задержки not busy-wait" 
Сообщение от dimus Искать по авторуВ закладки(??) on 16-Дек-05, 15:43  (MSK)
Вопрос вы сложный задали. Насколько я знаю, во многих современных процессорах есть "счетчики производительности". Если он есть в вашем процессоре, то вам повезло, так как на их основе можно организовывать очень маленькие задержки. Однако код будет либо блокирующий, но дающий точную задержку, либо неблокирующий, но тут величина разброса задержки будет зависить от других потоков, которые прийдется ОЧЕНЬ аккуратно в этом плане программировать.

Примерно так:

uint64_t begin;
uint64_t curent;

// Наша функция получения счетчиков производительности
begin = query_perfomance_counter();

do
{
      call_another_fiber();
      current = query_perfomance_counter();
}
while( current - begin < DELAY );

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх


Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру