Таймер разрешения на 1 мс в соответствии с Linux рекомендовал путь

Генерирует Java в основном время компиляции, это означает, что информация о типе теряется во время выполнения.

class GenericCls<T>
{
    T t;
}

будет скомпилирована для чего-то вроде

class GenericCls
{
   Object o;
}

. Чтобы получить тип информации во время выполнения вы должны добавить его как аргумент ctor.

class GenericCls<T>
{
     private Class<T> type;
     public GenericCls(Class<T> cls)
     {
        type= cls;
     }
     Class<T> getType(){return type;}
}

Пример:

GenericCls<?> instance = new GenericCls<String>(String.class);
assert instance.getType() == String.class;
18
задан lillq 20 January 2009 в 04:53
поделиться

7 ответов

Опрос в основном цикле не является ответом ни один - Ваш процесс не мог бы получить много процессорного времени, таким образом, больше чем 10 мс протекут, прежде чем Ваш код добирается для выполнения, представление его обсуждает.

10 мс о стандартном разрешении таймера для больше всего не - операционные системы реального времени (RTOS). Но это спорно в non-RTOS - поведение планировщика и диспетчера собирается значительно влиять, как быстро можно ответить на истечение таймера. Например, даже предположите, что у Вас был sub таймер разрешения на 10 мс, Вы не можете ответить на истечение таймера, если Ваш код не работает. Так как Вы не можете предсказать, когда Ваш код собирается работать, Вы не можете ответить на истечение таймера точно.

существуют, конечно, ядра Linux в реальном времени, см. http://www.linuxdevices.com/articles/AT8073314981.html для списка. RTOS предлагает средства, посредством чего можно получить мягкие или трудные гарантии о том, когда код собирается работать. Это о единственном пути к надежно, и точно ответьте на таймеры, истекающие и т.д.

15
ответ дан 30 November 2019 в 02:29
поделиться

Я не уверен, что это - лучшее решение, но Вы могли бы рассмотреть запись маленького модуля ядра, который использует ядро таймеры высокого разрешения, чтобы сделать синхронизацию. В основном Вы создали бы файл устройств, для которого чтения только возвратятся на интервалах на 1 мс.

пример этого типа подхода используется в Звездочке PBX через ztdummy модуль. Если Вы гуглите для ztdummy, можно найти код, который делает это.

6
ответ дан 30 November 2019 в 02:29
поделиться

Я думаю, что Вы испытаете затруднения при достижении точности на 1 мс со стандартным Linux даже с постоянными запросами в основном цикле, потому что ядро не гарантирует, что приложение получит ЦП все время. Например, Вы можете быть помещены для сна для десятков миллисекунд из-за вытесняющей многозадачности и существует мало, можно делать с этим.

Вы могли бы хотеть изучить Linux В реальном времени.

5
ответ дан 30 November 2019 в 02:29
поделиться

Я, кажется, вспоминаю, что получение хорошо заканчивается с gettimeofday/usleep, базирующимся, опрашивая - мне не были нужны 1 000 таймеров в секунду или что-либо, но мне была нужна хорошая точность с синхронизацией для галочек, в которых я действительно нуждался - мое приложение было контроллером драм-машины MIDI, и я, кажется, не забываю получать точность подмиллисекунды, в которой Вы нуждаетесь для драм-машины, если Вы не хотите, чтобы это походило на очень плохого барабанщика (особенно считающий встроенные задержки MIDI) - iirc (это был 2005, таким образом, моя память немного нечетка), я добирался в течение 200 микросекунд после целевых времен с usleep.

Однако я очень еще не работал в системе. Если у Вас есть управляемая среда, Вы смогли сходить с рук решение как этот. Если там больше продолжается, система (наблюдайте крон, разжигающий updatedb, и т.д.), затем, вещи могут развалиться.

2
ответ дан 30 November 2019 в 02:29
поделиться

Вы работаете на ядре Linux 2.4?

статья № 1420 From VMware KB ( http://kb.vmware.com/kb/1420 ).

гостевые операционные системы Linux сохраняют время путем подсчета прерываний по таймеру. Неисправленный 2.4 и более ранние ядра программируют виртуальный системный таймер для запроса прерываний по синхроимпульсам на уровне 100 Гц (100 прерываний в секунду). 2,6 ядра, с другой стороны, запрашивают прерывания во времена на 1000 Гц - десять как часто. Приблизительно 2,4 ядра, измененные поставщиками распределения для содержания 2,6 функций также, запрашивают прерывания на 1000 Гц, или в некоторых случаях, прерывания на других уровнях, таких как 512 Гц.

1
ответ дан 30 November 2019 в 02:29
поделиться

Существует патч ktimer для ядра Linux:

http://lwn.net/Articles/167897/

http://www.kernel.org/pub/linux/kernel/projects/rt/

HTH

1
ответ дан 30 November 2019 в 02:29
поделиться

Можно ли, по крайней мере, использовать наносон в цикле для сна для 1 мс? Или это - glibc вещь?

Обновление: Неважно я вижу из страницы справочника, "она может взять на 10 мс дольше, чем указанный, пока процесс не становится выполнимым снова"

0
ответ дан 30 November 2019 в 02:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: