Вниз
Скачать: CL | DM;

Процедура с фиксированным временем исполнения   Найти похожие ветки 

 
АлексейК   (2003-12-18 21:00) [0]

Проблема такая. Необходимо чтобы процедура выполнялась 4 милисеккунды (допустим), хотя она отрабатывает за 1,5. Подскажите что делать?
P.S. Измерял время с помощью GetTickCount. При попытке контроля времени получается ерунда.
var
T: DWord;
begin
T:=GetTickCount+4;
...
{Тело процедуры}
...
while GetTickCount<T do;
end;
В этом случае меньше 10 мс не получается.


 
MBo ©   (2003-12-19 09:05) [1]

Именно так - >чтобы процедура выполнялась 4 милисеккунды
сделать в Windows нельзя. 10 мс - характерное время переключения потоков для NT-систем.
Попробуй SetWaitableTimer (Win2K и выше)


 
MBo ©   (2003-12-19 09:08) [2]

А вообще нужно задачу описать, тогда может и решение найтись


 
АлексейК   (2003-12-24 23:57) [3]

Нет, SetWaitableTimer не помогло.
А задача в следующем: надо в течении (период) 4 мс.(4 дано для примера) посылать в порт(LPT1) 1/0 , т.е. формировать меандр с частотой от 100 до 1000 Герц.
Вот такая фигня!
P.S. А нельзя это характерное время переключения потоков как-нибудь уменьшить, хотя бы до 2 мс. ?


 
Slym ©   (2003-12-25 06:21) [4]

В операционных системах с вытесняющей многозадачностью такое не дано!
Системный процесс с TimeCriticлом или хуже с RealTiмом прижмет твою прогу хоть на полчаса...
+Такое понятие как прерывание вам знакомо? ну форматирование дискетки вспомните... да... вот оно... любое прерывание хуже RealTime процесса и обойти его можно только запретив прерывания... но в Windows этого без драйвера не сделать :)
да и представь такое... кому не лень будут запрещать прерывания на N времени...


 
Slym ©   (2003-12-25 06:30) [5]

Решение: драйвер...
Вычисляешь время выполнения "меандра"...
вычисляешь время выполнения операции
asm
1: dec eax
jnz 1
end;
отнимаешь от твоих 4мс "время выполнения "меандра""
и делишь на "время выполнения операции"
полученую циферку загоняешь в eax
запрешаешь прерывание (смотри ASM)
запускаешь меандр
запускаешь
asm
1: dec eax
jnz 1
end;
разрешаешь прерывания...



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.026 c
1-43471
aha
2004-02-29 15:26
2004.03.14
Работа с Chart , можно ли вычислить значение


1-43442
Archi Gudvin
2004-03-01 08:17
2004.03.14
Помогите пожалуйста. Как вычслить номер недили текущего года


3-43364
Денисыч
2004-02-15 01:18
2004.03.14
Как включить BDE в инсталлятор


1-43489
dr Tr0jan
2004-02-29 13:48
2004.03.14
Передача данных между сервисом и CPL-апплетом


8-43692
Alex55555
2003-11-11 12:16
2004.03.14
Звук




   Наверх