#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