Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.10.14;
Скачать: CL | DM;

Вниз

Получить уникальное значение   Найти похожие ветки 

 
John Kayfolom ©   (2002-10-04 10:47) [0]

Как получить уникальное значение средствами Дельфи? Уникальность должна сохраняться в течении всех запусков проги и ее должно хватить лет эдак на 10. ;)
Как я понимаю проще всего взять количество милисекунд с "начала времен". Но вопрос в том как взять. Вот сделал такую конструкцию:

Var Uni : Comp;
S : String;
begin
Uni:=TimeStampToMSecs(DateTimeToTimeStamp(Now));
S:=IntToStr(Uni);

Преобразование S:=IntToStr(Uni); не работает. Вообще с типом Comp что можно сделать?


 
MBo ©   (2002-10-04 10:49) [1]

GUID не устроит?


 
John Kayfolom ©   (2002-10-04 11:03) [2]

GUID? А как его сгенерировать? В хелпах только функции преобразования.


 
MBo ©   (2002-10-04 11:07) [3]

В IDE Ctrl-Shift-G
а программно - не знаю


 
Mike_Goblin ©   (2002-10-04 11:07) [4]

CreateGUID

Creates a globally unique identifier.

Unit

SysUtils

Category

interface support routines

function CreateGUID(out Guid: TGUID): HResult;

Description

CreateGUID sets Guid to a new-created Globally Unique Identifier. Under Windows, CreateGUID is simply an import of the Windows API CoCreateGUID. Under Linux, CreateGUID calls uuid_generate_time.


 
John Kayfolom ©   (2002-10-04 11:56) [5]

Посмотрел. Нет GUID не подойдет - нужно именно целочисленное 64 битное значение.


 
AZ ©   (2002-10-04 12:35) [6]

А что мешает выхватить оттуда случайным методом 64 бита?
Правда, уникальность ухудшится вдвое :)


 
Леха_   (2002-10-04 12:54) [7]

запоминать последний запуск и увеличивать значение


 
Юрий Зотов ©   (2002-10-04 13:57) [8]

> Как я понимаю проще всего взять количество милисекунд

Randomize;
Random(High(Int64));

Насколько я в курсе, Randomize инициализирует ДСЧ текущим временем в миллисекундах от начала суток. То есть, вероятность повтора - примерно 1/86400000 (почти одна стомиллионная). Если программу запускать только в дневное время (скажем, с 9 то 21 часа) то уникальности хватит примерно на 40 миллионов запусков. Если запускать, скажем, по десять раз в день - то более, чем на 10 тыс. лет.

Но это в случае, когда вероятность запуска в период с 9 до 21 распределена равномерно. Если же запускать, скажем, только в период с 9 до 10 - то делите обе цифры на 12. То есть, хватит примерно на 4 миллиона запусков или (если по 10 раз в день) на тысячу лет.


> Уникальность должна сохраняться в течении всех запусков проги
> и ее должно хватить лет эдак на 10. ;)

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


 
MBo ©   (2002-10-04 14:05) [9]

просто trunc(now*10000000000000) не устроит?


 
Anatoly Podgoretsky ©   (2002-10-04 14:11) [10]

При первом запуске I := 1, при всех последующих I := I + 1; Для Int64 и частоте запуска раз в миллисекунду хватит на 10 млн лет


 
han_malign   (2002-10-04 15:46) [11]

дествительно если программ только создается, то зачем брать время с начала времен, если можно начать с 04.10.02 15:43:17.346



Страницы: 1 вся ветка

Текущий архив: 2002.10.14;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.012 c
14-45544
Владик_1
2002-09-17 10:03
2002.10.14
Интернет технологии. PHP,Java,Perl? Что выбрать? С чего начать?


3-45224
Alex-69
2002-09-24 08:07
2002.10.14
Программно Net dir и Local Share


14-45590
MJH
2002-09-20 19:38
2002.10.14
Форсаж (e-Racer)


1-45303
.Ru
2002-10-04 00:01
2002.10.14
Потоки и картинки


1-45300
UWater
2002-10-04 16:31
2002.10.14
Картинка в StatusBar