Получение времени в наносекундах с помощью actionscript 3

#apache-flex #actionscript-3

#apache-flex #actionscript-3

Вопрос:

Привет, я пытаюсь получить текущее время, включая наносекунды, в actionscript 3 для использования в flex 4.5. Кто-нибудь, кто может мне помочь?

Комментарии:

1. Просто из любопытства, сколько наносекунд требуется для данного вашего приложения?

2. Мне нужно создать клиент для iOS (native) и Android (Flex) для сравнения различных форматов сообщений. И некоторые процессы десериализации на клиенте занимают менее 1 мс, поэтому продолжительность этой операции, по-видимому, составляет 0 мс

Ответ №1:

Наименьший показатель времени, доступный во Flash Player, равен миллисекундам.

Чтобы получить текущее время, просто создайте новый Date объект:

 var currentTime:Date = new Date();
  

Смотрите дополнительную документацию по Date классу здесь.

Ответ №2:

ActionScript не предоставляет таймер с такой точностью.

Комментарии:

1. Поверили бы мы времени, которое, как утверждается, с точностью до наносекунды на любом компьютере? Я думаю, что нет. Это было бы похоже на измерение дней с помощью колец дерева.

2. @pavium, существуют таймеры, которые более точны, чем другие, независимо от точности измерения. ActionScript не предоставляет никаких высокочастотных таймеров, доступных во многих других средах.

Ответ №3:

Я думаю, что обычный компьютер не поддерживает меньшую временную меру, чем мили

Комментарии:

1. В моем клиенте iOS есть функция запроса наносекунд

2. Существуют измерения, размер которых меньше миллисекунд. Не наносекунды, а что-то среднее. Например, вы можете использовать секундомер в .NET, который, в зависимости от ОС, будет более точным, чем миллисекунда.

Ответ №4:

Я не уверен, что кто-нибудь уже сделал это, но вы могли бы создать интерфейс сокета для NTP-сервера.

Вам не нужно реализовывать весь протокол целиком; вы могли бы просто сделать то, что ntpdate делает, чтобы сэкономить время. Прошло очень много времени с тех пор, как я работал непосредственно с протоколом, но я не думаю, что эта задача настолько сложна.

Комментарии:

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

2. Мысли в голове не превратились в ответ. На самом деле я думал о подключении к локальному экземпляру, если он доступен.

Ответ №5:

Вы не можете получить несекунды в Flex, на самом деле существует не так много языков, предоставляющих наносекунды в качестве результатов для временного интервала. Максимум, что вы могли бы получить, это «ticks», который в основном предоставляется для языков с выполнением собственного кода, но он не предоставляется непосредственно для языков сценариев.

Лучше всего было бы иметь разницу в миллисекундах и просто масштабировать результат в тестовом режиме примерно на большее время выполнения (например, на 10 или даже в 100 раз больше тестов), что значительно приблизит результаты к ожидаемым.

Ответ №6:

Когда я пытался измерить что-то в микросекундах, я зациклил это 1000 раз и вычел время на время, которое занимает фактический цикл for. И я бы получил что-то близкое к микросекундам.

 var startTime:int = new Date().valueOf();
for(var ii = 0;ii<1000;ii  )
{
    //do something here     
}
var endTime:int = new Date().valueOf();
trace(endTime-startTime);
  

Я думаю, вы можете выполнить цикл 1 000 000 раз, чтобы получить наносекунды, но вам придется подождать некоторое время для завершения цикла.

Комментарии:

1. это довольно неправильно, поскольку getMilliseconds возвращает миллисекундную часть даты. Не полная миллисекунда. Оно всегда находится в пределах 0,999