Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > Короткая временная задержка (микросекунды)


Автор: neoarey 12.10.2011, 12:29
Здравствуйте, люди добрые!

Подскажите пожалуйста как реализовать временную задержку на 50 микросекунд. Буду очень признателен. Максимум что мне удалось добиться через API это 1 миллисекунда.

Автор: FallFan 14.10.2011, 20:14
Наткнулся на статью, правда там не про vb6 и не про Windows.
 
http://citforum.ru/operating_systems/linux/HOWTO/mini/IO-Port-Programming/x121.shtml

Но смысл её примерно таков: даже если получиться, то точность минимальна, а проверить затруднительно.

Автор: Akina 14.10.2011, 22:46
neoarey, глянь http://www.codeproject.com/KB/dotnet/MicroTimer.aspx , может, сможешь переписАть под VB6...

Автор: Ne1tr1n0 18.10.2011, 13:56
1. WaitableTimer можешь попробовать (CreateWaitableTimer, SetWaitableTimer, WaitForSingleObjectEx). В MSDN написано время принимает время в 100-наносекундных интервалах, следовательно теоретически теоретически может такую точность обеспечить.
2. NtDelayExecution. Однако это недокументированная функция, поэтому не факт что везде будет работать.
Код
'NTDLL
Private Declare Sub NtDelayExecution Lib "NTDLL" (ByVal Alertable As Boolean, ByRef Interval As Any)
 
Private Sub NtSleep(ByVal lMs As Long)
    Call NtDelayExecution(False, CCur(-(lMs)))
End Sub

3.  Ещё можно помутить с QueryPerfomanceCounter. 
4. RDTSC. Правда это уже ассемблер.

Однако, к сожалению на интервалах менее 1 мс, эти способы будут давать бОльшую или меньшую погрешность. В общем пробуйте, выбирайте, наиболее приемлемый на ваш взгляд способ.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)