Global BinaryRandomValue, BinaryRandomThread1, BinaryRandomThread2 Procedure SetBinaryRandomDigitalNumber(Value) Repeat BinaryRandomValue = Value ForEver EndProcedure ProcedureDLL StartRandomizer() BinaryRandomThread1 = CreateThread(@SetBinaryRandomDigitalNumber(), 0) BinaryRandomThread2 = CreateThread(@SetBinaryRandomDigitalNumber(), 1) EndProcedure ProcedureDLL StopRandomizer() KillThread(BinaryRandomThread1) KillThread(BinaryRandomThread2) EndProcedure ProcedureDLL GetBinaryRandom() ProcedureReturn BinaryRandomValue EndProcedure Procedure SetBit(*Pointer.Integer, Position, Tension) If Tension *Pointer\i | (1 << (Position - 1)) Else *Pointer\i & (255 - 1 << (Position - 1)) EndIf EndProcedure ProcedureDLL GetRandom() For BitPosition = 1 To 64 SetBit(@IntegerRandomValue, BitPosition, BinaryRandomValue) Next ProcedureReturn IntegerRandomValue EndProcedure
Можно и оптимальнее...
Данная реализация испытана только на двухядерном процессоре, а вообще я перепишу для всех количеств процессоров.
Отредактировано PSY (16.05.2024 11:03:37)