Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2004.03.14;
Скачать: [xml.tar.bz2];

Вниз

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

 
АлексейК   (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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.057 c
1-43478
Ivolg
2004-02-29 16:47
2004.03.14
Как написать свой компонент


9-43243
dork
2003-08-25 05:28
2004.03.14
OpenGL


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


3-43262
Lapor
2004-02-06 19:03
2004.03.14
Как посмотреть индексы?


3-43329
BlackTiger
2004-02-17 16:48
2004.03.14
Как сделать аналог





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский