Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.10.14;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.008 c
1-45311
Supra
2002-10-03 10:14
2002.10.14
Описание к графическим файлам


1-45374
maxinfosoft
2002-10-05 16:34
2002.10.14
Как добавить в адресную книгу TheBat & Outloock новые записи?


14-45568
Mirovodin
2002-09-20 10:59
2002.10.14
Кто какими экспертами пользуется ?


1-45304
VIB
2002-10-04 16:21
2002.10.14
Макропотстановка


1-45347
Kolya
2002-10-02 02:28
2002.10.14
Array





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский