Определение тактов процессора
199895717
91968127
92081283
91992035
138214491
138416754
184396089
184163852
184401804
230550708
230516189
276733169
276712208
326309796
322720632
Почему при воспроизведении первого файла(самого короткого) у меня такое огромное кол-во тактов? И почему возрастание идёт не пропорционально, а ступенчато? Помогите пожалуйста, очень нужно.
Дело в том, что мне нужно сдать курсовую, которая должна при 15-ти различных тестах определять количество тактов процессора, вот... И на защите меня будут спрашивать, типа: "А чё это, мужик, у тебя такой график такой получился?". А я не знаю чё у меня такой график получился, т.е. мне нужна ПОМОЩЬ, разобраться в чём же дело. Может кто знает ссылки какие-нибудь, которые смогут помочь?
Если это поможет, то:
1)Система у меня WinXP(Устанавливаю: setpriorityclass(getcurrentprocess,REALTIME_PRIORITY_CLASS))
2)Формат Wav файла:
Size of Format: 16
Format: PCM
Channels: 2
Samplerate: 44100
Bytes/Sec: 176400
Block Align: 4
3)Листинг куска программы:
function GetCPUTick:int64; //определение тактов
var q:int64;
begin
asm
db $0f,$31
mov dword ptr [q],eax
mov dword ptr [q+4],edx
end;
GetCPUTick:=q;
end;
procedure PlaySndFromMemory(FileIndex:string);
var
f: file;
p: pointer;
fs: integer;
begin
AssignFile(f, FileIndex+'.wav');
Reset(f, 1);
fs := FileSize(f);
GetMem(p, fs);
BlockRead(f, p^, fs);
CloseFile(f);
sndPlaySound(p, SND_MEMORY or SND_SYNC);
FreeMem(p, fs);
end;
procedure TForm1.Button2Click(Sender: TObject);
var st,en:int64;
i:integer;
begin
for i:=1 to 15 do
begin
st:=GetCPUTick;
PlaySndFromMemory(inttostr(i));
en:=GetCPUTick;
listbox1.Items.Add('при длительности'+ ' '+inttostr(33*i)+' млс - '+ inttostr(en-st)+' тактов');
Ar:=inttostr(en-st);
Chart1.Series[0].AddXY(i,(en-st) div 1000,IntToStr(i*33));
end;