Главная страница
    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.45 MB
Время: 0.011 c
1-43520
Александр1
2004-02-27 19:59
2004.03.14
Работа с StringGrid1


1-43482
Ivolg
2004-02-29 15:18
2004.03.14
Текст


14-43769
SergPas
2004-02-13 13:26
2004.03.14
Регистрация ПО


7-43928
Gigant
2003-12-26 01:14
2004.03.14
Проблема с определением нажат ли Shift в Windows 98


8-43681
Sergious
2003-11-12 08:14
2004.03.14
Как проиграть mp3 без TMediaPlayer и без BassPlayer





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский