59 lines
1.6 KiB
ObjectPascal
59 lines
1.6 KiB
ObjectPascal
// Copyright (c) Ivan Bondarev, Stanislav Mikhalkovich (for details please see \doc\copyright.txt)
|
|
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
|
|
unit Utils;
|
|
|
|
interface
|
|
|
|
uses System;
|
|
|
|
function RecordToByteArray(obj : object): array of byte;
|
|
procedure ShowMessage(msg: string);
|
|
procedure ShowMessage(msg,capt: string);
|
|
function GetFunctionPointer(fnc : Delegate) : integer;
|
|
/// Замеряет время работы процедуры p в миллисекундах. Производит n запусков и усредняет время работы
|
|
function Benchmark(p: procedure; n: integer := 100): real;
|
|
|
|
implementation
|
|
|
|
uses System.Runtime.InteropServices;
|
|
|
|
function _MessageBox(h: integer; m,c: string; t: integer): integer;
|
|
external 'User32.dll' name 'MessageBox';
|
|
|
|
procedure ShowMessage(msg:string);
|
|
begin
|
|
ShowMessage(msg,'Сообщение');
|
|
end;
|
|
|
|
procedure ShowMessage(msg,capt:string);
|
|
begin
|
|
_MessageBox(0,msg,capt,0);
|
|
end;
|
|
|
|
function RecordToByteArray(obj : object): array of byte;
|
|
begin
|
|
var len := Marshal.SizeOf(obj);
|
|
Result := new byte[len];
|
|
var ptr := Marshal.AllocHGlobal(len);
|
|
Marshal.StructureToPtr(obj, ptr, false);
|
|
Marshal.Copy(ptr, Result, 0, len);
|
|
Marshal.FreeHGlobal(ptr);
|
|
end;
|
|
|
|
function GetFunctionPointer(fnc : Delegate) : integer;
|
|
begin
|
|
Result := System.Runtime.InteropServices.Marshal.GetFunctionPointerForDelegate(fnc).ToInt32;
|
|
end;
|
|
|
|
function Benchmark(p: procedure; n: integer): real;
|
|
begin
|
|
var sw := new Stopwatch;
|
|
sw.Start;
|
|
loop n do
|
|
p;
|
|
sw.Stop;
|
|
Result := sw.ElapsedMilliseconds/n;
|
|
end;
|
|
|
|
begin
|
|
end. |