Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Определение тактов процессора

11K
22 мая 2005 года
Mr.Dix
1 / / 22.05.2005
Определяю количество тактов, при разной длине wav-файла, всего 15 файлов, отличающиеся на 0,033 секунды. Строю график. Получаю следующие значения тактов
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;
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог