Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Получить уникальное значение [D6, Win2k]


John Kayfolom ©   (2002-10-04 10:47:00) 

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

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

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


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

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


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

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


MBo   (2002-10-04 14:05:00) [3]

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


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

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

Randomize;
Random(High(Int64));

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

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


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

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


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

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


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

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


John Kayfolom   (2002-10-04 11:56:00) [7]

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


MBo   (2002-10-04 11:07:00) [8]

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


Mike_Goblin   (2002-10-04 11:07:00) [9]

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:03:00) [10]

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


MBo   (2002-10-04 10:49:00) [11]

GUID не устроит?


Наверх

Титульная страница Поиск, карта сайта Написать письмо