Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.04.08;
Скачать: CL | DM;

Вниз

Задержки ?   Найти похожие ветки 

 
МИФИст ©   (2002-01-10 22:25) [0]

Искал, искал...так и не нашёл, как же сделать задержку в микросекундах, достаточно точную. Пытался сделать с помощью GetTickCount, да что то не очень. Например, NOP выполняется от 1.2мкс до 1.8мкс, это разве хорошо? не знаю что взять привязаться за эталон, короткой задержки(~1мкс или меньше), слышал, что кто-то делал с точностью до десятков наносекунд.
Заранее благодарю. =)


 
SoftOne ©   (2002-01-11 01:25) [1]

Я тоже МИФИст, но УВЫ помочь не могу! В микросекундах - могу лишь дать совет для DOS. Причем не очень простой.


 
Beauty_Full   (2002-01-11 04:02) [2]

Multimedia Timer my friend !


 
MegaVolt ©   (2002-01-11 10:06) [3]

Принесу ответ после 12:00 :)


 
andrucco ©   (2002-01-11 11:30) [4]

Юзай API для Performance Counter


 
Dimka Maslov ©   (2002-01-11 11:56) [5]

Windows.Sleep(dwMilliseconds)


 
MegaVolt ©   (2002-01-11 13:58) [6]

Вот принёс :)


var uTimerId:UINT;
//Старт таймер где:
//mS-Время в миллисекундах
//Error_mS допустимая ошибка формирования временного интервала в милисекундах
//RecVirtual функция вызываемая по срабатыванию таймера описывается так:
//procedure RecVirtual(uTimerID, uMessage: Uint; dwUser, dw1,dw2: DWORD) stdcall;


uTimerID:=TimeSetEvent(mS,Error_mS,@RecVirtual,100,time_periodic);
//Стоп
timeKillEvent(uTimerID);


Пользуйтесь на здоровье :)


 
Mbo ©   (2002-01-11 14:46) [7]

var QW : TLargeInteger;

QueryPerformanceFrequency(QW);
ClockRate := QW.QuadPart;
QueryPerformanceCounter(QW);
StartTime := QW.QuadPart;
repeat
//Application.ProcessMessages;
QueryPerformanceCounter(QW);
TimeElapsed:=(QW.QuadPart - StartTime)/ClockRate;
until TimeElapsed ...



 
Хакеренок   (2002-01-11 18:39) [8]

Вот тебе - Sleep(0,001) и все тут !!! А вы мучились :))))))))


 
SoftOne ©   (2002-01-12 02:57) [9]

2 Mbo © (11.01.02 14:46)
Из всех ответивших, Вы дали самый "лучший" ответ,
однако, как МИФИст, замечу, что для реальных физических измерений, зто врядли подходит.
Ещё раз, для реальных физических измерений, Windows просто не в дугу. DOS - ещё куда не шло. НО единственно грамотный способ - работать с внешним или внутрениим устройством, которое измеряет в реальном времени, а уж потом, при случае скидывает данные в компьютер.
Тут, кстати, можно перейти и к наносекундам, как спросил автор вопроса.


 
Slaventius   (2002-01-13 02:48) [10]

У Mbo всё отлично в ответе. Но могу дать пару советов (практических конечно :) ).

1. QueryPerformanceFrequency для РС всегда возвращает 1.193 МГц (или около того.. не помню точно). То есть 1 тик проходит ~0.8 микросекунд. То есть можно чуть оптимизировать алгоритм приведя задержку из времени в количество тиков. Деление что ни говори операция емкая...
2. Для увеличения точности, повысить исполняемому процессу приоритет. Что бы другие операции не так влияли на точность измерений. (полностью этого не избежать :( увы).
3. В любом случае - погрешность всё равно будет... На PII 266Mhz добивался точности измерений сигналов с периодом от 200мкс. И то.. Если винда дергала винтом, то возникали провалы в измерениях до 500 мс.. :-( Поэтому внешнее измеренее пожалуй самое правильное решение.



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

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

Наверх




Память: 0.49 MB
Время: 0.009 c
1-22691
Grishin
2002-03-26 13:22
2002.04.08
В чем проблема?


3-22592
Siberia
2002-03-11 17:43
2002.04.08
использование UPPER в SQL-запросах


1-22712
$Hic0
2002-03-26 16:24
2002.04.08
Непонятно отчего ошибка раз... неясно почему она не обрабатывается :(


1-22663
snoup
2002-03-28 10:50
2002.04.08
А как сделать так что бы например когда я запускаю таймер сек. ме


14-22813
С_тоша
2002-02-26 18:10
2002.04.08
HELP!!!!!!!!