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)
