Что нового

[Процессы] sleep менее 1 ?

Dimmak

Знающий
Сообщения
185
Репутация
9
Есть ли возможность в Autoit установить значение sleep < 1 ?
Может UDF для этой цели есть? :-\
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Dimmak
нет. sleep меньше 1 мс нельзя поставить. зачем такое понадобилось?
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
:beer:
Смотри как я могу! :IL_AutoIt_1:
Код:
#include <Timers.au3>

$i=0
$starttime = _Timer_Init()

$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1
$i+=1

$t = _Timer_Diff($starttime)
MsgBox(0,"", '100 операций  +=1  выполнялись ' & $t & " миллисекунд")

Но зачем???
:stars:


Добавлено:
Сообщение автоматически объединено:

Только время задержки не фиксированное. У меня на компе скачет от 0,002 до 0,004
:(
 

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
Замер времени и инициализация функций уже тратят время больше.
Код:
#include <Timers.au3>
$starttime = _Timer_Init()
While _Timer_Diff($starttime) < 0.01
WEnd
MsgBox(0, "Время выполнения", 'Время : ' & Round(_Timer_Diff($starttime), 2) & ' мсек')



Dimmak
Вообще Sleep(1) - Sleep(9) на самом деле дают результат Sleep(10)
Код:
$timer = TimerInit()
Sleep(1)
MsgBox(0, "Время выполнения", 'Время : ' & Round(TimerDiff($timer), 2) & ' мсек')

но можно таким способом задать именно от 1 до 9
Код:
$timer = TimerInit()
While TimerDiff($timer) < 3
WEnd
MsgBox(0, "Время выполнения", 'Время : ' & Round(TimerDiff($timer), 2) & ' мсек')
 
Автор
Dimmak

Dimmak

Знающий
Сообщения
185
Репутация
9
Kaster , C2H5OH
Нужно для конвертирования клавиатурных нажатий в миди сообщения.
AZJIO
Спасибо.
Вариант с таймером действительно дает нужный результат, но процессор при этом предельно загружен. А мне эта пауза нужна для освобождения процессора от лишней нагрузки.
Есть ли способ, чтоб сделать периодическую паузу для скрипта хотя-бы на 1мс, и без полной загрузки процессора?
...10 мс это слишком большая задержка для миди...
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
А если вот так?

Код:
#include <Timers.au3>

Global $counter = 0

$starttime = _Timer_Init()
AdlibRegister("Drink",1)
$t = _Timer_Diff($starttime)

MsgBox(0,"", "1000 дринков за " & $t & " мс")

Func Drink()
	If $counter > 1000 Then AdlibUnRegister("Drink")
    $counter +=1
EndFunc


А результат я объяснить не могу... :beer:
 
Автор
Dimmak

Dimmak

Знающий
Сообщения
185
Репутация
9
:ok:
Только вот как это все зациклить в 'While 1' без нагрузки на процессор?
 

rusreg79

Продвинутый
Сообщения
159
Репутация
57
Без нагрузки на процессор:
Код:
$dll_kernel32 = DllOpen("kernel32.dll")

_Sleep(1)

Func _Sleep($ms)
    DllCall($dll_kernel32, "DWORD", "Sleep", "int", $ms)
EndFunc

DllClose($dll_kernel32)
 
Автор
Dimmak

Dimmak

Знающий
Сообщения
185
Репутация
9
rusreg79
Суперрр!!! Спасибо! ;D
Вопрос решен, но ради спортивного интереса хотелось бы узнать:
В функции _Sleep($ms) параметр 'int' может быть заменен на 'float' для ввода десятичных значений? :scratch:
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
перечитал пару раз так и не понял чем функция
rusreg79 [?]
отличается от
Код:
Sleep(1)

обе одинаково не нагружают процессор. так зачем подключать лишнюю библиотеку?
 
Автор
Dimmak

Dimmak

Знающий
Сообщения
185
Репутация
9
joiner
_Sleep(1) - 1ms
Sleep(1) - 10ms
Прочитай пост AZJIO.
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
Dimmak
ну вобщем то я читаю справку ;)
 
Автор
Dimmak

Dimmak

Знающий
Сообщения
185
Репутация
9
OffTopic:

Я этой информации в справке не нашел :whistle:
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
"А я ж читать... Не стал я до конца читать." (C) 'Городок'

Код:
#include <Timers.au3>

$dll_kernel32 = DllOpen("kernel32.dll")
$starttime = _Timer_Init()
_Sleep(1)
_Sleep(1)
_Sleep(1)
_Sleep(1)
_Sleep(1)
_Sleep(1)
_Sleep(1)
_Sleep(1)
_Sleep(1)
_Sleep(1)
$t1 = _Timer_Diff($starttime)
DllClose($dll_kernel32)

$starttime = _Timer_Init()
Sleep(1)
Sleep(1)
Sleep(1)
Sleep(1)
Sleep(1)
Sleep(1)
Sleep(1)
Sleep(1)
Sleep(1)
Sleep(1)
$t2 = _Timer_Diff($starttime)

ConsoleWrite(@CRLF & "10 _Sleep(1) за " & $t1 & " мс" & @CRLF & "10  Sleep(1) за " & $t2 & " мс" & @CRLF)

Код:
10 _Sleep(1) за 141.23135761668 мс
10  Sleep(1) за 154.956006978541 мс


Добавлено:
Сообщение автоматически объединено:

Только вот как это все зациклить в 'While 1' без нагрузки на процессор?

А чем это хуже цикла?
Функция Drink выполняется каждую миллисекунду до выполнения условия
Код:
If $counter > 1000 Then AdlibUnRegister("Drink")


Поставь условие, какое тебе нравится и вперёд.
 

rusreg79

Продвинутый
Сообщения
159
Репутация
57
результаты у меня:
Код:
10 _Sleep(1) за 9.64500736667928 мс
10  Sleep(1) за 99.974415635665 мс
 
Автор
Dimmak

Dimmak

Знающий
Сообщения
185
Репутация
9
С2H5OH
Код:
10 _Sleep(1) за 9.39483549458492 мс
10  Sleep(1) за 99.8924998804773 мс
У меня так.

Я не совсем понимаю как использовать Adlib и твой пример в данном случае:
Вот условие:

Код:
While 1
   Call(Func)
   Sleep(0.1)
WEnd

Подскажи пожалуйста! :beer:
 

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
joiner
ну вобщем то я читаю справку
Обязательно будет добавлено в справку. Отписал на офсайте, посмотрим ответ, может исправят, вместо выписки примечаний.
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Dimmak,

Код:
AdlibRegister("Drink",1)


Означает: вызывать функцию Drink() каждые 1 мс.

Но я тут балуюсь с таймерами
Код:
#include <Timers.au3>

Global $counter = 0
Global $starttime = _Timer_Init()
Global $t
AdlibRegister("Drink",10)
Sleep(200000)
ConsoleWrite("10000 дринков за " & $t & " мс" &@CRLF)

Func Drink()
	If $counter > 10000 Then
		$t = _Timer_Diff($starttime)
		AdlibUnRegister("Drink")
	EndIf
    $counter +=1
EndFunc
та же фигня:

Код:
AdlibRegister("Drink",1)

и
Код:
AdlibRegister("Drink",10)


работают совершенно одинаково - вызов через каждые 15 мс.
:(
 

Ganibal95

GreenBytes
Сообщения
877
Репутация
240
Есть-же WinAPI функция...
Код:
Func _GAPI_Sleep($ms)
	DllCall('Kernel32.dll','bool','Sleep','dword', $ms)
EndFunc

прикол в том что
Код:
sleep(1)
идет гораздо больше чем 1...
 
Верх