Re[2]: Такты процессора при восспроизведении wav-файла
От: Аноним  
Дата: 22.05.05 11:42
Оценка:
Дело в том, alex_raider, что мне нужно сдать курсовую, которая должна при 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[i]:=inttostr(en-st);
Chart1.Series[0].AddXY(i,(en-st) div 1000,IntToStr(i*33));
end;
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.