Программирую под QNX, весь код на 90% POSIX-совместимый. По ходу в программе надо делать высокоточные задержки (кратные ХОТЯ БЫ 10мксек). Переопределение системного тика до требуемых величин (порядка 10-40 мксек) убивает живучесть системы, а использование блокирующих busy-wait функций (nanospin...) также нагружает машину (контроллер 300Mhz), тогда как suspend-thread функции (usleep, nanosleep,...) завязаны на тик и естественно дают задержку всегда более одного системного тика. Есть ли способ получить высокоточную задержку (10мксек минимально - ...) и неблокировать при этом поток, а suspend его, или альтернативы какие-нибудь. заранее благодарен.
http://qnx.org.ru/
Вопрос вы сложный задали. Насколько я знаю, во многих современных процессорах есть "счетчики производительности". Если он есть в вашем процессоре, то вам повезло, так как на их основе можно организовывать очень маленькие задержки. Однако код будет либо блокирующий, но дающий точную задержку, либо неблокирующий, но тут величина разброса задержки будет зависить от других потоков, которые прийдется ОЧЕНЬ аккуратно в этом плане программировать.Примерно так:
uint64_t begin;
uint64_t curent;// Наша функция получения счетчиков производительности
begin = query_perfomance_counter();do
{
call_another_fiber();
current = query_perfomance_counter();
}
while( current - begin < DELAY );