Code: Select all
; Version 24 april 2021
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn ; Enable warnings to assist with detecting common errors.
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
SetBatchLines -1 ; Make the operation run at maximum speed.
#SingleInstance force
Support := []
Support["namn"] := "Jack Lyndon"
Support["tfn"] := "072 - 1234567"
itrNumber = 30
oTest := []
runTime := []
ShowTime("Start", runTime)
Loop % itrNumber
oTest.push("A_Index") ; create a dummy array
Gui 1: Color, White
Gui 1: Font, s12 cBlue Bold, Verdana
Gui 1: Add, Text, x0 y10 h20 w300 +center, Test of run time clock
Gui 1: Font, s10 cBlue Normal, Verdana
Gui 1: Add, Text, x20 y50 h20 w150 +Left, Start clock . . .`t.:
Gui 1: Add, Text, xp yp+25 h20 w150 +Left, Estimated . . . .`t.:
Gui 1: Add, Text, xp yp+25 h20 w150 +Left, Runtime left . .`t.:
Gui 1: Add, Text, xp yp+25 h20 w150 +Left, Ready at . . . .`t.:
Gui 1: Font, s10 cGreen Bold, Verdana
Gui 1: Add, Text, x140 y50 h20 w70 +Right vTimeStart, % runTime.startClockShow
Gui 1: Add, Text, xp yp+25 h20 w70 +Right vProcTime ; Beräknad looptid
Gui 1: Add, Text, xp yp+25 h20 w70 +Right vTotRunLeft ; Körtid kvar
Gui 1: Add, Text, xp yp+25 h20 w70 +Right vTimeReady ; Klar klockan
; Gui 1: Font, s10 cBlue Normal, Verdana
; Gui 1: Add, Text, x220 y75 h20 w200 +Left, sek
; Gui 1: Add, Text, xp yp+25 h20 w200 +Left, sek
Gui 1: Font, s12 cGreen Bold, Verdana
Gui 1: Add, Text, x0 y170 h20 w300 +center vLev, Some information
Gui 1: Add, Progress, x50 y200 w200 h25 cAqua BackgroundSilver vMyProgress
Gui 1: Font, s10 cBlue Bold, Verdana
Gui 1: Add, Text, xp yp+3 h20 w200 +center +BackgroundTrans vProgTxt
Gui 1: Show, h250 w300
; Return ; Stopppar vidare analys
Gui 1: Font, s8 cBlue normal, Verdana
Gui 1: Add, Text, x0 y+8 h13 w300 +center vPauseTxt, (spacebar = pause)
Loop % oTest.count()
{ runTime["stoClock"] := runTime.staClock ; 20210418118311
; runTime["staTime"] := A_TickCount
GuiControl 1:, MyProgress, % Round(100 * A_Index / oTest.count())
GuiControl 1:, ProgTxt, % "( " A_Index " / " oTest.count() " )"
Sleep 1000
ShowTime("Estimat", runTime, A_LineNumber, A_Index, oTest.count())
/*
res := ""
for k, v in runTime
res .= "k.: " k "`t`tv.: " v "`n"
ToolTip % res
; MsgBox ,, Rad %A_LineNumber% -> %A_ScriptName%, % res
*/
GuiControl 1:, ProcTime, % runTime.estRunTimeShow
GuiControl 1:, TotRunLeft, % runTime.leftTimeShow
GuiControl 1:, TimeReady, % runTime.stoppClockShow
}
MsgBox ,, Rad %A_LineNumber% -> %A_ScriptName%, % "Program Ready!"
Return
; - - - S h o w T i m e - - - S h o w T i m e - - - S h o w T i m e - - -
ShowTime(typTime, runTime, line := "", numberItr := "0", totItr := "0")
{ ; Version 23 april 2021
Global Support
(!line) ? line := A_LineNumber
funcName := "ShowTime( " typTime ", runTime, " line ", " numberItr ", " totItr " )"
; MsgBox ,, Rad %A_LineNumber% -> %A_ScriptName%, % funcName
; 1) Kolla att typTime finns
If typTime not in Start,Estimat
{ MsgBox ,, Rad %A_LineNumber% -> %A_ScriptName%,
( LTrim
% "Typ av beräkning saknas!
Endast följande val finns aktiva .:
- `tStart
- `tEstimat`n
Detta program kommer att avslutas!
Kontakta " Support.namn " - " Support.tfn
)
}
; 2) Kolla om runTime är en array
If !isObject(runTime)
{ MsgBox ,, Rad %A_LineNumber% -> %A_ScriptName%,
( LTrim
% "runTime är inte ett Object!
Från rad .: " A_LineNumber "`n
Detta program måste avslutas!"
)
ExitApp
}
; 3) Avläser starttidne för programkörningen
If ( typTime = "Start" )
{ ; Sätt starttiden för programkörningen
; Skapar värden till array enligt följande
; startClock - 20210422222701 - Datum och tid just nu
; startClocShow - 22:27:01 - Klockan just nu
; startMS - 43843765 - Starttid i millisekunder
;
runTime["startMS"] := A_TickCount ; 488259218
runTime["startClock"] := A_Now ; 20210418111211
FormatTime tmpClock, % runTime.startClock, HH:mm:ss ; 11:47:11
runTime["startClockShow"] := tmpClock ; the clock to an array 11:47:11
Return
}
; 4) Beräkna några mellantider samt skapa presentation av dessa
If ( typTime = "Estimat" )
{ ; Beräknar följande storheter .:
; a) Pågående körtid - .totTime - 15000 ms
; - .totTimeShow - 1.5 sek / 01:15 min / 01:15:45
;
; b) Medeltid mellan anrop - .estimated - 1500 ms
; - .estShow - 1.5 sek / 01:15 min / 01:15:45
;
; c) Beräknad total körtid - .estRunTime - 2500 ms
; .estRunTimeShow - 1.5 sek / 01:15 min / 01:15:45
;
; d) Beräknad sluttid - .stoppClockShow - 11:47:13
;
; e) Tid kvar - .leftMS - 56000 ms
; - .leftTimeShow - 1.5 sek / 01:15 min / 01:15:45
;
; - Kvar av körtid
If (!totItr or !numberItr or !runTime.startMS or !runTime.startClock)
{ ; Kontrollera att önskade värden redan angivna
; If !runTime.totItr ; Om totalt antal /loopar) saknas. Kan beräkningar inte utföras.
; If !runTime.numberItr ; Vilken i ordningen bearbetas ( t.ex. 3 av 10 - eller A_Index)
; If !runTime.startMS ; Har valet "Start" körts och satt ett startvärde i ms? ex. 488259218
; If !runTime.startClock ; Har starttiden angetts ex. 20210418111211
MsgBox ,, Rad %A_LineNumber% -> %A_ScriptName%,
( LTrim
% "Värden / innehåll saknas vid anrop! `n
- ? .totItr . . . . . .`t(ex. 30) . . . . . . . . . . . . . . . . .:`t " totItr "
- ? .numberItr. .`t(ex. 245) . . . . . . . . . . . . . . . .:`t " numberItr "
- ? .startMS . . . .`t(ex. 488259218) . . . . . . . . . .:`t " runTime.startMS "
- ? .startClock . .`t(ex. 20210418111211) . . . . .:`t " runTime.startClock "`n
Funktionsanrop .:
`t " funcName "`n
Kontakta " support.namn "- " support.tfn "`n
Detta program kommer att avslutas!"
)
MsgBox ,,, Programmet avslutas!, 1
ExitApp
}
; a) Pågående körtid - från start till nu
runTime["totTime"] := A_TickCount - runTime.startMS ; 15000 [ms]
runTime["totTimeShow"] := CreateTimeFormat(runTime.totTime)
; b) Medeltid mellan funktions anrop
runTime["estimated"] := (A_TickCount - runTime.startMS) / numberItr ; 1500 [ms]
runTime["estShow"] := CreateTimeFormat(runTime.estimated)
; c) Totalt beräknad körtid - hela programmet
runTime["estRunTime"] := (runTime.estimated * totItr) ; 1895 [ms]
runTime["estRunTimeShow"] := CreateTimeFormat(runTime.estimated) ; 1.5 sek / 01:15 min / 01:15:45
; d) Beräknad sluttid - klockvisning
runTime.stoppClock := DateAdd(RunTime.startClock, Round(runTime.estRunTime/1000, 0), "Seconds")
FormatTime tmpClock, % runTime.stoppClock, HH:mm:ss ; 11:47:11
runTime["stoppClockShow"] := tmpClock ; the endTime clock to an array 11:47:11
; e) Hur lång tid kvar av körningen
runTime["leftMS"] := runTime.estimated * totItr - (A_TickCount - runTime.startMS) ; 56000.00 [ms]
runTime["leftTimeShow"] := CreateTimeFormat(runTime.leftMS) ; 1.5 sek / 01:15 min / 01:15:45
/*
res := ""
for k, v in runTime
res .= "k.: " k "`t`tv.: " v "`n"
ToolTip % res
*/
Return
}
}
CreateTimeFormat(time1)
{ ; Version 23 juni 2021
; time1 - format ms ex. 3000 ms
; Omvandlar ms till önskat tidformat ex. 1.5 sek / 01:15 min / 01:15:45
;
refClock := SubStr(A_Now, 1, 8) . "000000" ; 20210418000000
tmpClock := DateAdd(refClock, Round(time1/1000, 0), "Seconds") ; 20210418000015
If ( time1 < 60000 )
Return % Round(time1/1000, 1) " sec" ; the clock eg 1.5 sek
If ( time1 >= 60000 and time1 < 3600000 )
{ FormatTime tmpClock, % tmpClock, mm:ss
Return % tmpClock " min" ; the clock to an array 01:15 min
}
If ( time1 >= 3600000 )
{ FormatTime tmpClock, % tmpClock, HH:mm:ss
Return % tmpClock ; the clock to an array 01:15:45 hour
}
}
DateAdd(Date, Time, TimeUnits, Format:="yyyyMMddHHmmss")
{ ; https://www.autohotkey.com/boards/viewtopic.php?f=76&t=89520&p=394989#p394989
; from Rohwedder
Date := TimeStamp(Date, Format)
EnvAdd, Date,% Time,% TimeUnits
FormatTime, Date,% Date,% Format
Return, Date
}
DateDiff(Date1, Date2, TimeUnits, Format:="yyyyMMddHHmmss")
{ ; https://www.autohotkey.com/boards/viewtopic.php?f=76&t=89520&p=394989#p394989
; from Rohwedder
Date2 := TimeStamp(Date2, Format)
EnvSub, Date2,% TimeStamp(Date1),% TimeUnits
Return, Date2
}
TimeStamp(Date, Format:="")
{ ; https://www.autohotkey.com/boards/viewtopic.php?f=76&t=89520&p=394989#p394989
; from Rohwedder
Static Noon := A_Year A_MM A_DD 120000, Down := 7060504030201, FOld
FormatTime, D,% 8 Down,% Format?FOld:=Trim(Format):FOld
For all, V in ["Date","D"], Date := Trim(Date) ; add missing leading zeros
%V% := RegExReplace(%V%, "(?<=^|\D)(\d)(?=\D|$)", "0$1")
Loop, Parse,% (0 Down, N := Noon) ; today's noon
IF A_LoopField And Pos := InStr(D, A_LoopField)
N := SubStr(N,1,A_Index-2) SubStr(Date,Pos-1,2) SubStr(N,A_Index+1)
Return, N ; digits >0 from Down in D stand for Date's values
}
; - - - E N D - - - S h o w T i m e - - - - - - - - - - - - - - - - - -
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Space::
; https://www.autohotkey.com/boards/viewtopic.php?f=76&t=89734&p=395898#p395898
Pause,, 1
If A_IsPaused
{ Gui 1: Font, s8 cRed Bold, Verdana
GuiControl 1: Font, PauseTxt
GuiControl 1:, PauseTxt, (spacebar = run again!)
}
else
{ Gui 1: Font, s9 cGreen normal, Verdana
GuiControl 1: Font, PauseTxt
GuiControl 1:, PauseTxt, (spacebar = pause!)
}
SoundBeep, 1000 + 500 * A_IsPaused
ToolTip % "A_IsPaused .: " A_IsPaused
Return
ESC::ExitApp