![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| Vaneska |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 141 Регистрация: 15.3.2005 Где: Москва Репутация: 3 Всего: 4 |
Все стандартные функции Perl не возвращают время до долей секунд
А как этого добиться? Изучил реализацию сессий на PHP, предложенную Mal Hack`ом и решил на Perl`e модуль написать. Но в PHP доли секунд функция возвращает а в Perl`e нет. Помогите. --------------------
http://isokolov.blogspot.com/ |
|||
|
||||
| korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 31 Всего: 61 |
Можно получить с помощью syscall, только на тех платформах, где она поддерживается. А можно заюзать модуль Time::HiRes. Сейчас проснусь немного и приведу пример. Если не секрет, объясни зачем для сессий нужны доли секунд????
-------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
| Vaneska |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 141 Регистрация: 15.3.2005 Где: Москва Репутация: 3 Всего: 4 |
Суть такая:
Прочитал я эту статью, вдохновился и сейчас пишу модуль управления сессиями(регистрации/авторизации). Так вот Mal Hack для генерации SID использует одним из параметров текущее время создания сесии до долей секунд. Система хороша тем, что не передает сам SID только имя пользователя и это текущее время. Вот поэтому так важны доли секунд! --------------------
http://isokolov.blogspot.com/ |
|||
|
||||
| korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 31 Всего: 61 |
Насколько я понял, это нужно для уникальности. Я писал следующим образом: 1. Генерирую псевдо случайную строку цифр, например из 30 цифр. 2. Затем вычисляю текущее время, с помощью time() 3. Пишу подпрограмму, котой передаю 2 параметра, первый - наша слуйная строка цифр, второй текущее время. 4. В подпрограмме случайная строка разбивается на 2 части, а затем соединяется обратно, только в середину встявляется текущее время в секундах, с начала эпохи. 5. Вот эта строка чисел и возвращается. Как ты понимаешь, шансов на совпадение такого SID, практически нет и не нужно никаких стронних модулей и зависимостей от платформы. Пример приведу чуть позже, я уже напился. Это сообщение отредактировал(а) korob2001 - 5.5.2005, 19:09 -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
| korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 31 Всего: 61 |
Вот пример, моего способа:
ВНИМАНИЕ!!!! Цикл закончится только в двух случаях: 1. Если закончится дисковое пространство. 2. Если SID повторится. ЗЫ: Уменя ещё никогда не повторился. О долях секунд, я обязательно напишу, просто я сейчас не дома. Перебежками подбегаю к компу. Удачи. Это сообщение отредактировал(а) korob2001 - 5.5.2005, 21:57 -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
| aleksnn |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 27.4.2005 Репутация: 2 Всего: 2 |
Пока модератор недополз
Это был плагиат ;) |
|||
|
||||
| korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 31 Всего: 61 |
Единственное, что хочу подправить:
Ему просто не нужно узнать время выполнения скрипта, это необходимо для уникальности SID. Но всё равно спасибо, если нужно узнать время выполнения, то проще воспользоваться times(). Это сообщение отредактировал(а) korob2001 - 6.5.2005, 11:28 -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
| Vaneska |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 141 Регистрация: 15.3.2005 Где: Москва Репутация: 3 Всего: 4 |
Огромное спасибо!
Воспользуюсь твоим, korob2001, примером. Но по мимо этого в SID всетаки нужно довавить и IP и UserAgent. Будет более надежно. И потом для статистики полезно. Как закончу модуль, отдам на тестирование, если вы не против. Это мой первый серьезный модуль. Надо будет его как следует сделать. Но опыта у меня моловато. Буду надеется на вашу помощь. --------------------
http://isokolov.blogspot.com/ |
|||
|
||||
| korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 31 Всего: 61 |
Думаю никто против не будет, нет ничего плохого когда человек пытается создать что-то своё, такие идеи только поддерживаются. Главное желание и терпение и всё у тебя получится. Удачи тебе Это сообщение отредактировал(а) korob2001 - 7.5.2005, 03:52 -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
| Usya |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 154 Регистрация: 7.6.2005 Репутация: нет Всего: нет |
Чтобы не плодить темы решил написать здесь.
Как раз это мне и нужно, только не пойму принцип работы. Вот простенький пример, но почему-то он выводит одно и тоже время.
0.015:0.031:0:0 0.015:0.031:0:0 0.015:0.031:0:0 Заранее благодарен за посильную помощь. --------------------
Я не волшебник, я только учусь... |
||||
|
|||||
| korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 31 Всего: 61 |
Usya - проблема в том, что у тебя times() используется в списковом контексте. Она возвращает общее время в течении которого пользователь и сисстема занимали центральный процессор. Ты можешь один раз получить данные в списковом контексте и получишь время работы программы:
Если тебе нужно узнать, сколько отработала часть кода, тогда юзай times в скалярном контексте. Это сообщение отредактировал(а) korob2001 - 2.11.2005, 20:37 -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
| Usya |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 154 Регистрация: 7.6.2005 Репутация: нет Всего: нет |
Спасибо, но я так и не смог получить того, что хотел
1) Код
выдает 0.234:0.015:0:0 0.484:0.015:0:0 0.718:0.015:0:0 Так что скалярный контекст похоже тут не причем... Результат и в списковом изменяется. 2) sleep-относится к системному времени или пользовательскому и почему ни то, ни другое не зависит от sleep? Даже простой код
Выдает 0.015:0.015:0:0 --------------------
Я не волшебник, я только учусь... |
||||
|
|||||
| sharq |
|
||||||||||
![]() Perl Liker ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 13.12.2004 Где: Ростов-на-Дону Репутация: 23 Всего: 28 |
Usya
perldoc -f sleep
Ну правильно, ты сначала засыпаешь, а потом выдаешь время. Зачем ты используешь times, используй Time::HiRes::time - очень удобно.
Ты разве использовал скалярный контекст? Скалярный контекст - это либо
либо
-------------------- [color=gray]There's More Than One Way To Do It[/color] |
||||||||||
|
|||||||||||
| Usya |
|
||||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 154 Регистрация: 7.6.2005 Репутация: нет Всего: нет |
sharq
Нет, так я и не говорю про это. Просто korob2001 написал, что
а здесь по ходу дела и в списковом изменяется.
Вот здесь, если не трудно, немножко поподробнее. 1) Может мой "великий" английский дает о себе знать, но я там не нашел ответа на свой вопрос. 2) По-моему логично. Проспав две секунды скрипт должен мне выдать, сколько времени прошло с момента запуска. Я же не наоборот написал. 3) Если с этим не получится, тогда попробую, а пока хочется разобраться в чем загвоздка. --------------------
Я не волшебник, я только учусь... |
||||||
|
|||||||
| Usya |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 154 Регистрация: 7.6.2005 Репутация: нет Всего: нет |
--------------------
Я не волшебник, я только учусь... |
|||
|
||||
![]()
|
| Правила форума "Perl" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |