Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.03.14;
Скачать: 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 вся ветка

Текущий архив: 2004.03.14;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.035 c
1-43550
Batoon
2004-02-27 17:30
2004.03.14
работа с LISTBOX ом


6-43724
ThreeDHead
2004-01-04 23:46
2004.03.14
Вопрос про создание колиентского потока в TTCPServer


7-43908
_shark_
2003-12-23 12:14
2004.03.14
Как сделать так чтобы программа запускалась под всеми учетными


3-43267
ki2000
2004-02-11 20:23
2004.03.14
Проблемы с Lookup


3-43343
MicroWorld
2004-02-16 22:37
2004.03.14
опять запрос на 4