![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Передать управление другому процессу
TCrash © (2003-07-15 11:05:00)Написал маленькую тестовую прогу. вот она :
program writetst;
uses sysutils;
type
arr=array[1..1024]of longint;
var
aa: arr;
start,stop: TDateTime;
f: file of arr;
t: text;
i: integer;
begin
for i:=1 to 1024 do aa[i]:=i;
{$I-}
start:=now;
assignfile(f,"test");
rewrite(f);
for i:=1 to 25600 do begin
write(f,aa);
( f)
Написал маленькую тестовую прогу. вот она :
program writetst;
uses sysutils;
type
arr=array[1..1024]of longint;
var
aa: arr;
start,stop: TDateTime;
f: file of arr;
t: text;
i: integer;
begin
for i:=1 to 1024 do aa[i]:=i;
{$I-}
start:=now;
assignfile(f,"test");
rewrite(f);
for i:=1 to 25600 do begin
write(f,aa);
// сюда вставлять
end;
close(f);
stop:=now;
assignfile(t,"result");
rewrite(t);
writeln(t,DateTimeTostr(Start));
writeln(t,DateTimeTostr(Stop));
close(t);
{$I+}
end.
в указанное место требуется вставить какую-нить команду для передачи управления ОС, на время, которое будет происходить запись на диск. Какую функцию для этого можно использовать ?
Morfein (2003-07-15 12:47:00) [1]
А тут нечего обсуждать... скорость ~34 Мб/с недостижима для обычного hdd (не SCSI)... тем более что это NTFS раздел, на котором наверняка включено сжатие... Всё дело в кэше диска и файловой системы.
Да и потом, что это за метод тестирования? Вы бы ещё по 32 байта за один проход цикла писали... тогда бы время записи всего файла вообще минут двадцать бы было...
TCrash (2003-07-15 12:15:00) [2]
Результаты тестирования обескуражили.
Изначально порграмка писалась для определения, кто быстрее работает с жестким диском.
На компе W2k wks и Win Srv 2003.
Программа по сути только создает на диске 2000 Мб файл.
Так вот собственно результат :
W2k - 0:58
2003 - 5:31
Конфигурация компа :
P4 2,4 / mb Intel / ram 256 DDR
тестирование проводилось на NTFS-разделе
Предлагаю обсудить в "Потрепаться"
TCrash (2003-07-15 11:37:00) [3]получилось то что требовалось, но не так как думалось.
В хелпе написано, что Yield только для 16-ти разрядных задач.
С 32-х разрядной средой эта функция не взаимодействует.
сделал так :
rewrite(f);
for i:=1 to 25600 do begin
write(f,aa);
получилось то что требовалось, но не так как думалось.
В хелпе написано, что Yield только для 16-ти разрядных задач.
С 32-х разрядной средой эта функция не взаимодействует.
сделал так :
rewrite(f);
for i:=1 to 25600 do begin
write(f,aa);
Sleep(0);
end;
Sleep определяет на сколько милисекунд заснет thread. Если поставить 0, как я понял из хелпа в своем переводе :-), thread не засыпает а отдает системе ресурсы, оставшиеся от самого thread. Понимаю, пояснение корявое, но работает, а эт главное :-)
Anatoly Podgoretsky (2003-07-15 11:25:00) [4]
Может тебе пауза нужна, проясни свою мысль.
Anatoly Podgoretsky (2003-07-15 11:24:00) [5]
Не подойдет
TCrash (2003-07-15 11:15:00) [6]
нет, интересует не это.
нашел функцию Yield, но не уверен, что это подойдет.
Щаз буду пробовать.
Anatoly Podgoretsky (2003-07-15 11:10:00) [7]
CreateProcess+WaiForSingleProcess