Форум: "Основная";
Текущий архив: 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