E1M1 Posted December 24, 2009 Share Posted December 24, 2009 (edited) [solution] Compiled and moved it to windows XP machine (Virtual box) [EndSolution] How to sleed this loop up? It does about 20 loop/sec and needs lot's of time thatway. CPU usage is below 2% which means that that loop could be alot faster but for some reason it doesn't use 100% of cpu. Is there any delays? or what thing makes it so slow? expandcollapse popup#include <ButtonConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #Region ### START Koda GUI section ### Form= $Form1 = GUICreate("Form1", 312, 110, 192, 124) $Teisenda = GUICtrlCreateButton("Teisenda", 208, 72, 75, 25, $WS_GROUP) $Pic1 = GUICtrlCreatePic("C:\Users\rain\Desktop\pühad.bmp", 0, 0, 198, 99, BitOR($SS_NOTIFY, $WS_GROUP, $WS_CLIPSIBLINGS)) GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $Teisenda $startpos = WinGetPos("Form1") ;~ MsgBox(0,$startpos[0]+3,$startpos[1]+24) ;~ Offsets for windows 7 theme _Area2HTML($startpos[0] + 3, $startpos[1] + 24, 198, 99) EndSwitch WEnd Func _Area2HTML($startX, $startY, $endX, $endY) MsgBox(0,0,"start") $times = 0 $data = "" For $y = 1 To $endY For $x=1 To $endX $times += 1 ToolTip($times,0,0) $data &= '<font color="#'&Hex(PixelGetColor($startX+$x, $startY+$y), 6)&'">'&Random(0,1,1)&'</font>' Next $data &= "<br>" Next MsgBox(0,"Done","Done") FileWrite("pic.html",$data) EndFunc ;==>_Area2HTML Edited December 24, 2009 by E1M1 edited Link to comment Share on other sites More sharing options...
jebus495 Posted December 24, 2009 Share Posted December 24, 2009 (edited) 50ms per loop is slow?Edit: NVMI may have a solution pending.Edit: Check THIS out. Edited December 24, 2009 by jebus495 Link to comment Share on other sites More sharing options...
E1M1 Posted December 24, 2009 Author Share Posted December 24, 2009 but If ther's no Sleep(X) thenshouldn't it use 100% CPU? edited Link to comment Share on other sites More sharing options...
Developers Jos Posted December 24, 2009 Developers Share Posted December 24, 2009 but If ther's no Sleep(X) thenshouldn't it use 100% CPU?Gotto love the Helpfile:GUIGetMsg()RemarksThis function automatically idles the CPU when required so that it can be safely used in tight loops without hogging all the CPU. SciTE4AutoIt3 Full installer Download page - Beta files Read before posting How to post scriptsource Forum etiquette Forum Rules Live for the present, Dream of the future, Learn from the past. Link to comment Share on other sites More sharing options...
E1M1 Posted December 24, 2009 Author Share Posted December 24, 2009 Ok I took GUIGetMsg() out from my code but it's still slow like it was before. expandcollapse popup#include <ButtonConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #Region ### START Koda GUI section ### Form= $Form1 = GUICreate("Form1", 312, 110, 192, 124) $Teisenda = GUICtrlCreateButton("Teisenda", 208, 72, 75, 25, $WS_GROUP) $Pic1 = GUICtrlCreatePic("C:\Users\rain\Desktop\pühad.bmp", 0, 0, 198, 99, BitOR($SS_NOTIFY, $WS_GROUP, $WS_CLIPSIBLINGS)) GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### ;~ While 1 ;~ $nMsg = GUIGetMsg() ;~ Switch $nMsg ;~ Case $GUI_EVENT_CLOSE ;~ Exit ;~ Case $Teisenda $startpos = WinGetPos("Form1") Sleep(5000) ;~ MsgBox(0,$startpos[0]+3,$startpos[1]+24) _Area2HTML($startpos[0] + 3, $startpos[1] + 24, 198, 99) ;~ EndSwitch ;~ WEnd Func _Area2HTML($startX, $startY, $endX, $endY) MsgBox(0,0,"start") $times = 0 $data = "" For $y = 1 To $endY For $x=1 To $endX $times += 1 ToolTip($times,0,0) $data &= '<font color="#'&Hex(PixelGetColor($startX+$x, $startY+$y), 6)&'">'&Random(0,1,1)&'</font>' Next $data &= "<br>" Next MsgBox(0,"Done","Done") FileWrite("pic.html",$data) EndFunc ;==>_Area2HTML edited Link to comment Share on other sites More sharing options...
Developers Jos Posted December 24, 2009 Developers Share Posted December 24, 2009 (edited) Why are these msgbox() statements in there? How much data is generated in the loops? Edited December 24, 2009 by Jos SciTE4AutoIt3 Full installer Download page - Beta files Read before posting How to post scriptsource Forum etiquette Forum Rules Live for the present, Dream of the future, Learn from the past. Link to comment Share on other sites More sharing options...
E1M1 Posted December 24, 2009 Author Share Posted December 24, 2009 Looks like PixelGetColor() doesn't allow autoit to use 100% of cpu. Following loop goes alot faster and uses 100% of cpu Func _Area2HTML($startX, $startY, $endX, $endY) MsgBox(0,0,"start") $times = 0 $data = "" For $y = 1 To $endY For $x=1 To $endX $times += 1 ToolTip($times,0,0) ;~ $data &= '<font color="#'&Hex(PixelGetColor($startX+$x, $startY+$y), 6)&'">'&Random(0,1,1)&'</font>' $data &= '<font color="#000000">0</font>' ;~ $data &= '<font color="#'&PixelGetColor($startX+$x, $startY+$y)&'">0</font>' Next $data &= "<br>" Next MsgBox(0,"Done","Done") FileWrite("pic.html",$data) EndFunc ;==>_Area2HTML edited Link to comment Share on other sites More sharing options...
AndyG Posted December 25, 2009 Share Posted December 25, 2009 Hi, this could be a solution if you don´t want to display the file on the screen (or if you don´t want to use PixelGetColor() ) expandcollapse popup#include <GDIPlus.au3> #include <GDIPlusConstants.au3> $BMPfile = "mona-lisa.jpg" $t = TimerInit() _Area2HTML($BMPfile, 1, 1, 198, 99) ; $m = TimerDiff($t) ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $m = ' & $m & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console ShellExecute("pic.html") Func _Area2HTML($BMPfile, $startX, $startY, $endX, $endY) ;Bitmapfiles, 24bpp only _GDIPlus_Startup() $pBitmap = _GDIPlus_BitmapCreateFromFile($bmpfile) If @error Then MsgBox(0, "", "Error BitmapCreateFromFile") $BitmapData = _GDIPlus_BitmapLockBits($pBitmap, 0, 0, _GDIPlus_ImageGetWidth($pBitmap), _GDIPlus_ImageGetHeight($pBitmap), $GDIP_ILMREAD, $GDIP_PXF24RGB) If @error Then MsgBox(0, "", "Error locking region " & @error) $stride = DllStructGetData($BitmapData, "Stride") ;Stride - Offset, in bytes, between consecutive scan lines of the bitmap. If the stride is positive, the bitmap is top-down. If the stride is negative, the bitmap is bottom-up. $Width = DllStructGetData($BitmapData, "Width") ;Image width - Number of pixels in one scan line of the bitmap. $Height = DllStructGetData($BitmapData, "Height") ;Image height - Number of scan lines in the bitmap $ptr = DllStructGetData($BitmapData, "Scan0") ;Scan0 - Pointer to the first (index 0) scan line of the bitmap. If $startX < 1 Or $startY < 1 Or $endX > $width Or $endY > $height Then MsgBox(0, "Error _Aera2HTML", "Selected Area not possible!", 1) _GDIPlus_BitmapUnlockBits($pBitmap, $BitmapData) _GDIPlus_ImageDispose($pBitmap) _GDIPlus_Shutdown() return SetError(1, 0, 1) EndIf $data = "" $htmlpixel = Chr(129) ;take some other For $y = $startY-1 To $endY-1 For $x = $startX-1 To $endX-1 ;$stride * $y + 3 * $x this is the position of the pixel in the bmp $substruct = DllStructCreate("dword", $ptr + $stride * $y + 3 * $x) ;read 4 bytes BBGGRRXX, little endian $color = Hex(DllStructGetData($substruct, 1), 6) ;we need only the last 3 bytes from XXRRGGBB $data &= '<font color="#' & $color & '">' & $htmlpixel & '</font>' Next $data &= "<br>" Next FileDelete("pic.html") FileWrite("pic.html", $data) _GDIPlus_BitmapUnlockBits($pBitmap, $BitmapData) _GDIPlus_ImageDispose($pBitmap) _GDIPlus_Shutdown() EndFunc ;==>_Area2HTML Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now