Что нового

Как определить что программу "замораживали" (suspend)

MadDog

Новичок
Сообщения
26
Репутация
0
На данный момент не могу определиться как лучше и правильней отследить что программу во время работы замораживали.
У кого какие варианты ?
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Если время было 14:00 и вдруг стало 23:10, тода, программу замораживали или же перевели время))
 
Автор
MadDog

MadDog

Новичок
Сообщения
26
Репутация
0
это не вариант. Т.к. это не определит заморозку скажем на 5 секунд
 

_Lexa98_

Осваивающий
Сообщения
551
Репутация
25
Re: Как определить что программу \"замораживали\" (suspend)

MadDog
Можно посчитать и секунды :smile:


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

Или просто всегда себя размораживать (грузит проц), чтобы не заморозили
 
Автор
MadDog

MadDog

Новичок
Сообщения
26
Репутация
0
рабочий пример бы посмотреть ;)
 

Findoss

Знающий
Сообщения
9
Репутация
7
Вот все работает. замораживал программу Process Explorer'ом
НО есть одно НО т.к. функция возвращает разницу времени, между "установкой" $tCur и $tCur2 , можно искусственно создать паузу тем самым с имитируем заморозку :(, то же самое вызывает быстрое сворачивание/разворачивание окна программы. :mad:

Код:
#include <Date.au3>

GUICreate("Моя программа", 400, 300)
GUISetState()
Local $tCur = _NowCalc() ;первый 

AdlibRegister("_DateTime", 1000) ;вызывает функцию каждую секунду 

While 1 ; общий цикл программы
   $tCur = _NowCalc()
   Sleep (20) ; Sleep (5000)
WEnd

Func _DateTime ()
      $tCur2 = _NowCalc()
      $iDateCalc = _DateDiff("s",$tCur,$tCur2) ;сравнение времен
;~    ConsoleWrite("Дата номер 01  "&$tCur&@CR)
;~    ConsoleWrite("Дата номер 02  "&$tCur2&@CR)
;~    ConsoleWrite("Сравнение  "&$iDateCalc&@CR)
      If  $iDateCalc > 3 Then ; если разница больше 3х секунд
	  MsgBox(0,"Error","Замораживали")
	  Exit
   EndIf
EndFunc
 
Автор
MadDog

MadDog

Новичок
Сообщения
26
Репутация
0
Я вот тоже боюсь ложного срабатывания... поэтому хочу уйти от таймера времени...
Надеюсь есть ещё другие варианты которые реально реализовать на autoit
 

asdf8

Скриптер
Сообщения
564
Репутация
152
MadDog [?]
Я вот тоже боюсь ложного срабатывания... поэтому хочу уйти от таймера времени...

Таймеры разные бывают :

Код:
#Include <WindowsConstants.au3>
#Include <GUIConstantsEx.au3>
#Include <WinAPIEx.au3>

$hGui = GUICreate("Form")
GUISetState(@SW_SHOW)

Global $iSuspTimer, $iFlagSusp
GUIRegisterMsg($WM_TIMER, 'WM_TIMER')
_WinAPI_SetTimer($hGui, 1, 250, 0)
$iSuspTimer = TimerInit()

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
	EndSwitch
	If $iFlagSusp Then
		$iFlagSusp = 0
		MsgBox(48,"Error","Замораживали", 5, $hGui)
	EndIf
WEnd

Func WM_TIMER($hWnd, $Msg, $iTimerId, $iTime)
	If $hWnd = $hGui And $iTimerId = 1  Then
		If TimerDiff($iSuspTimer) > 500 Then $iFlagSusp = 1
		$iSuspTimer = TimerInit()
	EndIf
	Return $GUI_RUNDEFMSG
EndFunc
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Re: Как определить что программу \"замораживали\" (suspend)

Я вот тоже боюсь ложного срабатывания... поэтому хочу уйти от таймера времени...
Надеюсь есть ещё другие варианты которые реально реализовать на autoit

Не надейся.
AutoIt - это интерпритатор.
То есть, AutoIt3.exe берёт твой скрипт, читает его и тут же выполняет.
Когда ты в трее нажимаешь "Script Paused", то это ты даёшь команду самому интерпритатору приостановить выполнение инструкций скрипта. Скрипт про эту заморозку ничего не знает. Поэтому отловить такую ситуацию можно только отслеживая таймеры, сравнивая их с эталонным значением.


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

Кстати, вот прикольный скрипт, эффект которого основан на том что AutoIt - интерпритатор.
Код:
#include <Timers.au3>

$testTimer = _Timer_Init()
For $i=0 To 10000
	Test1()
Next
$t1 =_Timer_Diff($testTimer)

$testTimer = _Timer_Init()
For $i=0 To 10000
	Test2()
Next
$t2 =_Timer_Diff($testTimer)

MsgBox(0,"","Время выполнения без 'Local' - "&$t1&@cr&"Время выполнения с 'Local' - "&$t2)


Func Test1()
    ;Local $x1, $x2, $x3, $x4, $x5, $x6, $x7, $x8, $x9, $x10, $x11, $x12
EndFunc

Func Test2()
    Local $x1, $x2, $x3, $x4, $x5, $x6, $x7, $x8, $x9, $x10, $x11, $x12
EndFunc


:laugh:
 
Верх