![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Получить уникальное значение [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 не устроит?