1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. UEZ

Beiträge von UEZ

  • GDI+ layered gui (transparent)

    • UEZ
    • 18. August 2016 um 12:22

    Hier ein Beispiel, wie man ein Bild transparent darstellen kann.

    AutoIt
    #include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    
    
    _GDIPlus_Startup()
    Global Const $SC_DRAGMOVE = 0xF012
    Global $iW, $iH, $hImage, $hBitmap, $hGUI
    $hImage = _GDIPlus_BitmapCreateFromMemory(_Torus())
    $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
    $iW = _GDIPlus_ImageGetWidth($hImage)
    $iH = _GDIPlus_ImageGetHeight($hImage)
    $hGUI = GUICreate("", $iW, $iH, -1, -1, $WS_POPUP, $WS_EX_LAYERED)
    GUISetState()
    _WinAPI_BitmapDisplayTransparentInGUI($hBitmap, $hGUI)
    
    
    GUIRegisterMsg($WM_LBUTTONDOWN, "_WM_LBUTTONDOWN")
    
    
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    
    
    _WinAPI_DeleteObject($hBitmap)
    _GDIPlus_BitmapDispose($hImage)
    _GDIPlus_Shutdown()
    GUIDelete()
    
    
    Func _WinAPI_BitmapDisplayTransparentInGUI(ByRef $hHBitmap, ByRef $hGUI, $iOpacity = 0xFF, $bReleaseGDI = True)
    	If Not BitAND(GUIGetStyle($hGUI)[1], $WS_EX_LAYERED) = $WS_EX_LAYERED Then Return SetError(1, 0, 0)
    	Local $tDim = DllStructCreate($tagBITMAP)
    	If Not _WinAPI_GetObject($hHBitmap, DllStructGetSize($tDim), DllStructGetPtr($tDim)) Then Return SetError(2, 0, 0)
    	Local $tSize = DllStructCreate($tagSIZE), $tSource = DllStructCreate($tagPOINT), $tBlend = DllStructCreate($tagBLENDFUNCTION)
    	Local Const $hScrDC = _WinAPI_GetDC(0), $hMemDC = _WinAPI_CreateCompatibleDC($hScrDC), $hOld = _WinAPI_SelectObject($hMemDC, $hHBitmap)
    	$tSize.X = $tDim.bmWidth
    	$tSize.Y = $tDim.bmHeight
    	$tBlend.Alpha = $iOpacity
    	$tBlend.Format = 1
    	_WinAPI_UpdateLayeredWindow($hGUI, $hScrDC, 0, DllStructGetPtr($tSize), $hMemDC, DllStructGetPtr($tSource), 0, DllStructGetPtr($tBlend), $ULW_ALPHA)
    	_WinAPI_ReleaseDC(0, $hScrDC)
    	_WinAPI_SelectObject($hMemDC, $hOld)
    	_WinAPI_DeleteDC($hMemDC)
    	If $bReleaseGDI Then _WinAPI_DeleteObject($hHBitmap)
    	Return True
    EndFunc
    
    
    
    
    Func _WM_LBUTTONDOWN($hWnd, $iMsg, $wParam, $lParam)
    	_SendMessage($hGUI, $WM_SYSCOMMAND, $SC_DRAGMOVE, 0)
    EndFunc   ;==>_WM_LBUTTONDOWN
    
    
    
    
    ;Code below was generated by: 'File to Base64 String' Code Generator v1.19 Build 2014-11-14
    
    
    Func _Torus($bSaveBinary = False, $sSavePath = @ScriptDir)
    	Local $Torus
    	$Torus &= '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'
    	$Torus &= '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'
    	$Torus &= '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'
    	$Torus &= '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'
    	$Torus &= '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'
    	$Torus &= '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'
    	$Torus &= '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'
    	$Torus &= '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'
    	$Torus &= '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'
    	$Torus &= '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'
    	$Torus &= 'aLKSijxXImbmqQ1BCTJIroab8Y0Pg7ihiQDajoviSnJuCjEeAfoBARQToJjWm3Zv/N4/dXfdOeQnS9kjS3opiYYBPnbNgtmCkIDsHQDPYKD8XtSNp+IvvNgCImhZRUSotTQZTgQ7ioVtQsxG8ijJbcow9ZLIxgo+EHZ1ADYYdnqfwKadHBLegYxJYbYdKdjUGJ5ATpQdAz0fl6W+BH+YtrX9Lmyn+MTFAaZ6AsFN3SIJtEUtBtA+1TkKAUwqVBCA1hof5DN7Hnrw0wee+G5/OCBjJX8oiWRT6FFJsWC2YCQgo0D5owDvRpx/Bn/VKdHk54hEsLW63O6Fj1XyyAzhQm9beAUCbuIGAJNk4O00taCX3sETIUIK/72zJUEA+tp2UOrXRowWg+pa7Z+5lCg1g05M1o3AbCu1CgF8XVvM6NFjEoBah07vfuCpT+7f/KWWxnFsbSV/2G+gDNZL4gXIFnwwqn8G2PxGgCfwl74a34uZYWaADKzDefGHbT0kDz5h/pYArHTV24y69HPAShKIriXQu8on8EO6VF0/5UC0ldRw8yKIEjgTMkQuSbDftviaYNHMIa+ddw3gsuBvg8qyJHcd4SkTRB1j6LcUtvTnLpF+FAjuByC6RpqukIWuKr7EmnqI9VUySAB8pt09D2z/zN6HP/eAVsMaE8qO8LQQYQq37gfH+Tq55uvCZtQLPqfBoozI9hWA+5EIPfxFP0StAaL9hSOlK/cflmCv+h0nPo1phl1R9QyOIYL7jAEyJA7gLYSwx+sjtHngBs2X25Y0BHzaAPoA+BVREgt+Vw9gasvJA4rOLzwqhHI9wWz3SBvgmv3SjR+k6hVhMg06SACUTfsfP/Dl3Q98/mZteuINsxD8DGwpf3rB8XAtCcCkWPB+Hos1LKGeAbjnAiQA/rqXjUsEpUonS6rmFOSmWV+boBdcDAAgPIMeIAODG9ywLWlQ2idpOqDFZWqyIseonmDINQL41firbsxQU0Pu+gK70c5o0DLFGZ9C10aF4DX3CDNgd61BTTxQWJk0GgG2HLjumXu/cpXqD8sEkcXAHzZ9kOAOCVJC3UtIUiy4LdrYnJvwR+0EuBkj5A6+hxfjoalhRKhKfh5iywKb5ZEv9aFqMm09QlKbTNCTgc4FYK68g5BAkgh8bTLoEUZZatfL/gHcbqh2nSOqaztEXU2NhEPUmhHhOONDw6K4AXFlX2CqE7GeoBoVwl4XlPyl7SMcJQCNFrjnof3X7X7gq59XvftGeLUS6KH0kUSQxJABspRNISkWpbffYg5Qqx9H3D6BRLgQYCvi7mXajhvqa5T5FyuXspTN6EoOUJ08UkoPeAVDEOC5dutkqMkk87d6wDt4YjjJJKXPOHFAU1yQD0ikCvSyRSgF6lTyJ6WTPcoOelw6DyCHQDHNHBwR+q5TPLf4LN14oUXpxg31+4g4I48SXxHmskDQ3b1x+5f2PvS5q3Tx8AjvNAQ7A7qAwZgg9AJNwJeSaFFs0Udp3oaYvQpjhNdhsJwDvATf1dEh3f2AWi5rIyunbPBclfB0Svs2P+I41MkAWtfmSpDewROiFvwKUvhGboknx3hLVcon3OJTgt7VX6RuEhOT6iyryi7lRn6r+gK7Xl6uxrdXcMM3V0fAfYILFxcocMMn2mCYGqSb8URFRZguZ/TB3Q889Q/7Nn3ue1qNMul2KHvClqChFOpDXB6FwOf1ovX5Tub+EWNb7pZVv4Wy6Fm23/4FmZ3wMzqWeu6aGLuJOUQzZJdtcft0TSL2qbNOmmcBuFPfhDqpHauGiSHJpP12vZZ4nPQoW1hbDN4rKdteGaAiqJgl0rTl97PAiEny3OjQpWvsVg2Ua3t9me6RvmMMN4vmyTVSof0dAfr79c5dGx74q4NPfvmJ0aZZZb1OYzhJEHehTopucLwQ28OOLZotxXj9nPdNrgXYfhrANScCnKbNpDhYGMb+QMijUjRss5kh7QNjJQJjI3+SqrZXBV6gWupzrJnrqXmF'
    	$Torus &= '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'
    	$Torus &= 'Xz4Uf070Ex4rO+SAz5IHnO4HF8yCKeEr4JfuGu8B6O+pOUiJ+MZSPykOlj1VHHwa4LHbAe6mKVLdRISjWqwjexshmuSPJMqoBFjyVGjja1rqGxhi4xAh5W1KpSIZnn8xwIuREK9BQpyJ8DpyoOQP9gfAH3lIIz8wRwAGtfcEDvSUxwcBfFvauw7VmtoaodbvH0DY9KBQxQEUPlvuwhL/+wBbaeCrEbM9ZE3j/sc6urfJInl8NmSYSAKYV7XUNzCixaRRBs2kYPJ0MF5Y/SMAZ58D8PLjcMHI+iQ8fmQKfrLLKOhleV8bIXukp1oRgINZu+2Ou1G1TTMGkjjUm4saQeC2xgWP6wL0gT0A2zYBPHg3wKY7ALaPAXyy2BCGIfjlMCgxQsSAHiNDOILExEug2uta6hsYw0bxCGnDvtlGr7DuhQCnnQdwwXokBhLk+XjyaLxoFbVeTcSksbW5mcd6YImnl+a1a4atTUqU+hHYFq9uEC/tRjrpoq7Z9yTAo1sR/Aj6xx4D2NMdrwQNS/1w6BJ5PAR/eKxJFhUwnAwTVQ8wwhtbVjYq+GvySGzXSHEqwFHPAzgRCXH0mQDnIknOXm0D69V40brEXjcQK8zGtFsQOV1EyDSiY3ovwDNY0j+8GeDpbUiApwD27x1viBE5XHkI/HA/lEKxQbFioA8D5ZjMWbYEIFtuJCAbB/wxAmSR47ym+ZbWoYc44gUApz8bF8o0HYEkWYvk4Do01GbH4B+s0Q3hApbee1EDTNN5EjwYyG7DY308RkM3kKbfiYq/mAXgyeS4nCEJYsBvk0JNmaG2QbNGJcOyseVIArJxwB8jQpQAUCdIFhz3VRDHIElW2zjFTttcP0/DNfe7FkhZcM/jmpRC4dSlEtjhfps3CEv+JiK0eYJhZFhWtlxJQBYCOuYhQiKEniAkAW+HrbUbCQEV0D0JgmMQ2R7VVGS7zSOM6g3COEFuh54gBHxblmjZEYBsQcciXWCjB94LfgO/yFysyeildsQxLqX5ulScl0BnUsjjBQwSAmBpSRCCHWAQ/P3IdTHwN3mCMPuzbOVPaMuZBGz8QiToJdglKSTQm8ggPQUfCz0AQJwEIfgXggRN8cCo8UEohWLgb5NCsSzRsrZDgQRk4QuUpT4fk6BuIkNsv0kSQXAeoJ0EsxnUQA5AFSMB7zd5gCYpVDTsD4sLwuzRsicA2aFCArJQHuRD1jEyhKX/qHFAE/gXkgQx0If7MSIMA39TXBDuHzK2nAPjNvPdjyGeGWoLjtvA3yaLAAbBv9DZIT7eJoPajo0bFxwypb+0Q5UEbDEitJEhBHkuPidGCIDBuABgcUkQS5OGwCcroJkQo8QFhxz42Q51ErCNQoa2Y8MC4ibwL3R2iNfDAuQ2GXTYgp/tcCEB2zAJNEwWATR7AwiOASwMCXi7LUBua0oRk0FN0uiwsMONBGyhBIqBP+YJQgnU5g34OogcH9VickgeV5HtJlI0ESIkw2EDfrbDlQRsUv60AT88DhAnBUC89J8NAdjCGCA81lR5NiwgDusKDnnZ02SHOwnYRs0MNTWTaIsL5LHZ2LDgOLY9CvBD6XTY2goJBk16BoDhnmCUOoL5IsGodQVNGaLDVvK02QoJmq0N9G0eYLE9Aa/b2hGtlPottkKC0SyWGeL9SfIEfExBPJZYsYitkGB2NumeYMXGsBUSzJ8tpSdYsTnYCgkWx+aLBCu2Yiu2Yiu2Yiu2Yiu2Yiu2Yiu2Yiu2Yiu2Yiu2Yiu2Yiu2Yiu2Yiu2YvNn/x8H6goDo7OU7wAAAABJRU5ErkJggg=='
    	Local $bString = Binary(_WinAPI_Base64Decode($Torus))
    	If $bSaveBinary Then
    		Local $hFile = FileOpen($sSavePath & "\Torus.png", 18)
    		FileWrite($hFile, $bString)
    		FileClose($hFile)
    	EndIf
    	Return  $bString
    EndFunc   ;==>_Torus
    
    
    Func _WinAPI_Base64Decode($sB64String)
    	Local $aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "ptr", 0, "dword*", 0, "ptr", 0, "ptr", 0)
    	If @error Or Not $aCrypt[0] Then Return SetError(1, 0, "")
    	Local $bBuffer = DllStructCreate("byte[" & $aCrypt[5] & "]")
    	$aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "struct*", $bBuffer, "dword*", $aCrypt[5], "ptr", 0, "ptr", 0)
    	If @error Or Not $aCrypt[0] Then Return SetError(2, 0, "")
    	Return DllStructGetData($bBuffer, 1)
    EndFunc   ;==>_WinAPI_Base64Decode
    Alles anzeigen

    Du könntest auch anstelle des Bildes auch ein eigenes Bild erstellen und es darstellen.

  • Kicktipp Bundesliga 2016/2017 Wetttippen! Jetzt mitmachen :)

    • UEZ
    • 13. August 2016 um 12:34
    Zitat von Alina

    Wenn ich immer auf den tippe, der Heimspiel hat, sollte ich doch rein von der Logig her doch schon mal 50% richtig haben.

    Nicht richtig, denn ein Spiel kann 3 Zustände haben: Sieg, Unentschieden, Niederlage.

    Demnach, wenn du immer auf Sieg tippst, ist die Wahrscheinlichkeit 33,333%, dass du richtig liegst.

    Punkte gibt's auf

    • richtig getippt, aber Tore stimmen nicht -> 2 Punkte
    • richtig getippt und Tordifferenz stimmt -> 3 Punkte
    • richtig getippt und Tore stimmen vollständig -> 4 Punkte

    Beispiel:

    FCB - BVB -> 1:2

    Getippt 0:1 -> 3 Punkte
    Getippt 2:1 -> 0 Punkte
    Getippt 1:1 -> 0 Punkte
    Getippt 0:2 -> 2 Punkte
    Getippt 1:2 -> 4 Punkte

  • Kicktipp Bundesliga 2016/2017 Wetttippen! Jetzt mitmachen :)

    • UEZ
    • 12. August 2016 um 23:03
    Zitat von Yaerox

    *laufschrift* +++ Gerüchte um kommendes Bundesliga Oracle 2016 +++ *laufschrift*


    :Glaskugel: Das Orakel "Rainer_Zufall" ist jetzt eingerichtet und nach diesem Code trage ich die Werte ein

    AutoIt
    ;Code für Rainer_Zufall KickTipp Account build 2017-05-10 by UEZ
    #include <Array.au3>
    
    
    Global Const $sHTML = BinaryToString(InetRead("http://www.wettfreunde.net/bundesliga-quoten"))
    ;~ ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $sHTML = ' & $sHTML & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
    
    
    Global $iSpieltag = StringRegExp($sHTML, "<h4>Bundesliga Spieltag\h+(\d*?)\h+.+[von|am]+.+", 3)[0]
    Global $aSpiele = StringRegExp($sHTML, '.+td colspan="\d*".+;">(.+)<\/span', 3)
    ;~ _ArrayDisplay($aSpiele)
    If UBound($aSpiele) <> 9 Then Exit ConsoleWrite("Alle Spiele konnten nicht gefunden werden!" & @CRLF)
    
    
    Global $aQuoten = StringRegExp($sHTML, '.+td style.+strong\>(.+)<\/strong', 3)
    ;~ _ArrayDisplay($aQuoten)
    ;~ If UBound($aQuoten) <> 135 Then Exit ConsoleWrite("Alle Quoten konnten nicht gefunden werden!" & @CRLF)
    Global $aResultat[9][5]
    For $i = 0 To 8
    	$aResultat[$i][0] = StringReplace($aSpiele[$i], "–", "-")
    	$aResultat[$i][0] = StringReplace($aResultat[$i][0], "ü", "ü")
    	$aResultat[$i][0] = StringReplace($aResultat[$i][0], "ö", "ö")
    Next
    
    
    $k = 0
    For $i = 0 To UBound($aQuoten) - 1 Step UBound($aQuoten) / 9
    
    
    	;Sieg Heim
    	$fDurchschnitt = 0
    	For $j = 0 to UBound($aQuoten) / 27 - 1
    		$fDurchschnitt += StringReplace($aQuoten[$i + $j], ",", ".")
    	Next
    	$aResultat[$k][1] = StringFormat("%.2f", Round($fDurchschnitt / (UBound($aQuoten) / 27), 2))
    
    
    	;Unentschieden
    	$fDurchschnitt = 0
    	For $j = 0 to UBound($aQuoten) / 27 - 1
    		$fDurchschnitt += StringReplace($aQuoten[5 + $i + $j], ",", ".")
    	Next
    	$aResultat[$k][2] = StringFormat("%.2f", Round($fDurchschnitt / (UBound($aQuoten) / 27), 2))
    
    
    	;Niederlage Heim
    	$fDurchschnitt = 0
    	For $j = 0 to UBound($aQuoten) / 27 - 1
    		$fDurchschnitt += StringReplace($aQuoten[10 + $i + $j], ",", ".")
    	Next
    	$aResultat[$k][3] = StringFormat("%.2f", Round($fDurchschnitt / (UBound($aQuoten) / 27), 2))
    
    
    	$aResultat[$k][4] = Rainer_Zufall($aResultat[$k][1], $aResultat[$k][2], $aResultat[$k][3])
    	$k += 1
    Next
    
    
    _ArrayDisplay($aResultat, "Bundesliga Spieltag " & $iSpieltag, "", 0, "|", "Spiel|Sieg Heim|Unentschieden|Niederlage Heim|Rnd Tipp")
    
    
    Func Rainer_Zufall($fS, $fU, $fN)
    	Local $aUnentschieden[21] = ["0:0", "0:0", "0:0", "0:0", "0:0", "0:0", _
    								 "1:1", "1:1", "1:1", "1:1", "1:1", _
    								 "2:2", "2:2", "2:2", "2:2", _
    								 "3:3", "3:3", "3:3", _
    								 "4:4", "4:4", _
    								 "5:5"]
    	Local $iS = Round($fS * 10, 0), $iU = Round($fU * 10, 0), $iN = Round($fN * 10, 0)
    	Local Const $iMax = $iS + $iU + $iN
    	Local $aTabelle [$iMax], $z = 0
    
    
    	For $i = 1 To 10
    		_ArrayShuffle($aUnentschieden)
    	Next
    	Local Const $iMaxTore = 5
    	Local $iH, $iA
    	Do
    		Switch $z
    			Case 0 To $iS - 1 ;Quote Sieg Heimmannschaft
    				Do
    					$iH = Random(0, Random(1, $iMaxTore, 1), 1)
    					$iA = Random(0, Random(1, $iMaxTore, 1), 1)
    				Until $iA > $iH ;umgekehrte Tore generieren, da Quote die Niedgriste ist
    				$aTabelle[$z] = $iH & ":" & $iA
    			Case $iS to $iU - 1
    				$aTabelle[$z] = $aUnentschieden[Random(0, 18, 1)]
    			Case Else
    			 Do
    				$iH = Random(0, Random(1, $iMaxTore, 1), 1)
    				$iA = Random(0, Random(1, $iMaxTore, 1), 1)
    			 Until $iH > $iA ;umgekehrte Tore generieren, da Quote die Höchste ist
    			 $aTabelle[$z] = $iH & ":" & $iA
    		EndSwitch
    		$z += 1
    	Until $z = $iMax
    ;~ 	_ArrayDisplay($aTabelle)
    	For $i = 1 To 10
    		_ArrayShuffle($aTabelle)
    	Next
    	Return $aTabelle[Random(0, UBound($aTabelle) - 1, 1)]
    EndFunc
    Alles anzeigen


    :D

  • Kicktipp Bundesliga 2016/2017 Wetttippen! Jetzt mitmachen :)

    • UEZ
    • 12. August 2016 um 14:31
    Zitat von Alina

    Darf und kann man denn die ganze Saison durch tippen oder muss man jede Woche tippen? Ich habe so gut wie keine Ahnung vom Fussball, deshalb meine Frage.

    Hi Alina,

    du kannst auch die ganze Saison durchtippen, wenn du willst. Ich habe auch keine richtige Ahnung von Fußball, aber es geht primär um den Spaß Faktor und ein bisschen darum zu siegen.
    Vielleicht lasse ich mal den Random Generator tippen...

  • Kicktipp Bundesliga 2016/2017 Wetttippen! Jetzt mitmachen :)

    • UEZ
    • 11. August 2016 um 13:13

    Bald fängt die neue Saison an und wer mitmachen möchte, einfach auf Kicktipp registrieren und unter https://www.kicktipp.de/autoit-bl Mitglied werden.

    Ich hoffe diesmal auf zahlreiche Teilnehmer.

    PS: bitte auch KONTINUIERLICH mittippen
    PSS: wer sich anmeldet und nicht tippt, wird "gekickt"

    Ergebnis:
    Kicktipp16-17.png

    Herzlichen Glückwunsch an Tweaky zum Sieg! :thumbup:

  • Battle: Autoit vs. FreeBasic - Runde 1+2+3

    • UEZ
    • 9. August 2016 um 14:09
    Zitat von BananaJoe

    UEZ:
    Hallo,
    ich weiß, daß Du diesen Test speziell mit GDI/GDI+ machst.

    AutoIt ist ja eigentlich als Automatisierungstool gemacht worden. Kann man mit FB auch Programme automatisieren? Wenn ja, wäre da mal ein Geschwindigkeitstest interessant. Und weil es bereits oben erwähnt wurde, auch mit AHK.

    Danke und Gruß

    Das kann ich dir im Detail nicht sagen, aber Andy hat recht, wenn er sagt, dass man fast mit allen Programmiersprachen automatisieren kann. Ich weiß nicht, inwiefern FB mit Automatisierungsfunktionen ausgestattet ist. Dafür ist ja AutoIt da...

    Ein weiterer Vorteil von FB ist, dass i.d.R. der Code auch unter Linux läuft. Für den grafischen Schnick-Schnack muss man ggf. Anpassungen vornehmen.

  • Battle: Autoit vs. FreeBasic - Runde 1+2+3

    • UEZ
    • 9. August 2016 um 12:49

    Danke :thumbup: , wie zu erwarten sind die Werte ähnlich, da die API Calls den Flaschenhals bilden.

    Ich habe einen weiteren Effekt hinzugefügt (GDI Elastic Twister Effect - Au3 vs FB), aber ohne die Runde auf 4 zu erhöhen, da sie eigentlich mit Runde 1+2 ähnlich ist.

    Guckst du Post#1

  • Battle: Autoit vs. FreeBasic - Runde 1+2+3

    • UEZ
    • 8. August 2016 um 19:09

    kaesereibe: gibt es auch eine kompilierte Exe dazu? Ansonsten kann ich nicht viel damit anfangen.

  • Theorie: AutoIt3-Compiler

    • UEZ
    • 8. August 2016 um 01:22

    Ich frage mich, warum der ganze Aufwand von Au3 - > FB, abgesehen vom masochistischen Verlangen?

    Da FB keine komplizierte Sprache ist und man sie relativ einfach erlernen kann, gehe ich persönlich eher einen anderen Weg.
    Entweder ich schreibe in FB eine DLL, die ich in AutoIt benutze (z.B. _GDIPlus_BitmapApplyFilter v0.9.5 build 2016-07-14 beta) oder ich schreibe gleich in FB (Battle: Autoit vs. FreeBasic - Runde 1+2+3).

    Meine Meinung: das Konzept Au3 - > FB ist nichts Ganzes, nichts Halbes. Im engl. Forum gibt es den Ansatz Au3 -> C/C++ -> https://www.autoitscript.com/forum/topic/180595-au4-library/

    Viel SM Spaß. :D

  • Battle: Autoit vs. FreeBasic - Runde 1+2+3

    • UEZ
    • 7. August 2016 um 13:23

    Ich finde die Umgebung, wie auch AutoIt, einfach perfekt - installieren und du kannst fast loslegen. VS ist ein Monster diesbezüglich, wo ich mehrmals verzweifelt bin nur die IDE zu bedienen.

    Blitzbasic scheint jetzt seit einiger Zeit Freeware zu sein, nur weiß ich nicht, ob BB die bessere Wahl wäre für die "brotlose Kunst".

    Momentan finde ich FB sehr angenehm zu arbeiten, wobei man im Vergleich zu AutoIt einige Klimmzüge mehr machen muss, um simple Dinge wie z.B. Arraysort oder ein simples GUICreate zu realisieren.

    Hier eine Liste der BASIC Derivate: http://basic.mindteq.com/index.php?i=popular

  • Battle: Autoit vs. FreeBasic - Runde 1+2+3

    • UEZ
    • 7. August 2016 um 00:20

    Bei mir sind's ca. 50-55% schneller. :thumbup:

    Hier der ASM Code von FB vs Andy:

    Code
    .globl _MANDELITER_ASM@12
    _MANDELITER_ASM@12:
    push ebp
    mov ebp, esp
    sub esp, 4
    push ebx
    push esi
    push edi
    mov dword ptr [ebp-4], 0
    .Lt_0152:
    mov eax, [ebp+16]      
    mov ecx, eax            
    mov edx,0x40800000      
    movd xmm7,edx           
    movd xmm4,[ebp+12]      
    pslldq xmm4,4           
    movd xmm5,[ebp+8]      
    addps xmm4,xmm5         
    xorps xmm0,xmm0         
    label1:
    pshufd xmm1,xmm0,0xD0   
    pshufd xmm2,xmm0,0xD4   
    mulps xmm1,xmm2         
    pshufd xmm2,xmm1,0xF6   
    movups xmm3,xmm2        
    addps xmm3,xmm1         
    comiss xmm3,xmm7        
    setb bl                 
    test bl,bl              
    jz labelend             
    addsubps xmm1,xmm2      
    addps xmm1,xmm4         
    movups xmm0,xmm1        
    dec ecx                 
    jnz label1              
    labelend:
    sub eax,ecx             
    mov [ebp-4], eax
    .Lt_0153:
    mov eax, dword ptr [ebp-4]
    pop edi
    pop esi
    pop ebx
    mov esp, ebp
    pop ebp
    ret 12
    .balign 16
    
    
    .globl _MANDELITER@12
    _MANDELITER@12:
    push ebp
    mov ebp, esp
    sub esp, 28
    push ebx
    mov dword ptr [ebp-4], 0
    .Lt_0154:
    movss xmm7, [_Lt_0158]
    movss [ebp-8], xmm7
    mov dword ptr [ebp-12], 0
    mov dword ptr [ebp-16], 0
    mov dword ptr [ebp-20], 0
    mov dword ptr [ebp-24], 0
    mov eax, dword ptr [ebp+16]
    mov dword ptr [ebp-28], eax
    .Lt_0156:
    movss xmm6, [ebp-20]
    addss xmm6, dword ptr [ebp-16]
    comiss xmm6, dword ptr [_Lt_0159]
    setb al
    shr eax, 1
    sbb eax, eax
    cmp dword ptr [ebp-28], 0
    seta bl
    shr ebx, 1
    sbb ebx, ebx
    and eax, ebx
    je .Lt_0157
    movss xmm6, [ebp-12]
    mulss xmm6, dword ptr [ebp-8]
    movss [ebp-24], xmm6
    movss xmm6, [ebp-8]
    mulss xmm6, dword ptr [ebp-8]
    movss [ebp-16], xmm6
    movss xmm6, [ebp-12]
    mulss xmm6, dword ptr [ebp-12]
    movss [ebp-20], xmm6
    movss xmm6, [ebp-16]
    subss xmm6, dword ptr [ebp-20]
    addss xmm6, dword ptr [ebp+8]
    movss [ebp-8], xmm6
    movss xmm6, [ebp-24]
    unpcklps xmm6, xmm6
    pshufd xmm7, xmm6, 0x01
    addss xmm6, xmm7
    addss xmm6, dword ptr [ebp+12]
    movss [ebp-12], xmm6
    add dword ptr [ebp-28], 4294967295
    jmp .Lt_0156
    .Lt_0157:
    mov ebx, dword ptr [ebp+16]
    sub ebx, dword ptr [ebp-28]
    mov dword ptr [ebp-4], ebx
    .Lt_0155:
    mov eax, dword ptr [ebp-4]
    pop ebx
    mov esp, ebp
    pop ebp
    ret 12
    .balign 16
    Alles anzeigen


    Das FB schneller ist als AutoIt bzw. GPU schneller als CPU muss nicht diskutiert werden.

    Wie gesagt, fehlt mir das Wissen MMX/SSE Code zu schreiben, aber die Idee hatte ich auch, schon bei dem Partikel beispiel.

    Und bist du mit FB zurecht gekommen? Der Editor (FbEdit) könnte ruhig ein paar Features mehr haben.

  • Battle: Autoit vs. FreeBasic - Runde 1+2+3

    • UEZ
    • 5. August 2016 um 23:31
    Zitat von Andy

    Battle 3. Teil kann kommen....

    Du meinst bestimmt Battle 4. Teil... :P

    Ich sehe gegenüber AutoIt eine Menge Vorteile, wenn es um "Brotlose Kunst" geht: schneller, Multithreading fähig, Inline Assembler bereits an Bord, auch relativ einfach zu lernen.

    Ich bin mir nicht sicher, aber OpenGL und DirectX sind ebenfalls an Board.

    Da frage ich mich ernsthaft, warum ich noch in AutoIt "Brotlose Kunst" coden soll!

  • Battle: Autoit vs. FreeBasic - Runde 1+2+3

    • UEZ
    • 5. August 2016 um 22:43

    Mein Fazit:

    • willst du in der Hauptschleife GDI+ Funktionen benutzen, dann kann FB auch keine Wunder bewirken, da die GDI+ DLL Aufrufe langsam sind
    • benutzt du native Funktionen, wie z.B. das Setzen eines Pixels, so vollbringt FB einen richtigen Performance Schub
    • willst du noch weiter den Speed steigern, so benutze eigenen MMX/SSE optimierten Assembler Code
    • für AutoIt lagere die Performance Killer in eine externe DLL aus oder benutze gleich den Inline Assembler, dann sollte der Speed adequat zu FB sein
    • wenn trotz allem die Performance immer noch zu langsam ist, dann versuche es mal mit OpenCL

    Mir persönlich ist der Weg "durch die Brust ins Auge -> AutoIt Inline Assembler" der schwierigere Weg, da FB relativ einfach zu lernen ist und man damit schnelle Dinge "zaubern" kann.

  • Battle: Autoit vs. FreeBasic - Runde 1+2+3

    • UEZ
    • 5. August 2016 um 19:44
    Zitat von Andy

    Auch im Hinblick auf auf weitere "Battles" hätte ich gerne Anwendungen gesehen, welche von den bei FB und AutoIt gleich schnell ausgeführten API-Funktionen (ist das so?) abhängig sind.


    Ich habe mal einen weiteren Test hinzugefügt, wo primär GDI+ Funktionen aufgerufen werden und siehe da, AutoIt schlägt sich tapfer Dank der "lahmen" GDI+ Funktionen.

    FB kann erst nativ die volle Hengst Power entfalten, wenn die API Calls entfallen.

  • Battle: Autoit vs. FreeBasic - Runde 1+2+3

    • UEZ
    • 5. August 2016 um 12:11
    Zitat von Andy

    kein Wunder, da genau der "langsame" DllStructSetData() in einem ewig langen Loop wieder verwendet wurde.

    Ich habe es nicht getestet, aber eine schnellere Methode als diese um direkt Pixels in die Bitmap zu schreiben gibt es nicht. Jeder API Aufruf dürfte mehr Zeit kosten.


    Zitat von Andy

    Übrigens ist es bei mir so, dass beim FB-Programm der Fensterinhalt schwarz wird, sobald ich das Fenster nur zu einem kleinen Teil über den Bildschirmrand schiebe...

    Sollte doch so ähnlich auch in AutoIt sein, dass der Gfx Handle überschrieben wird. Ich müsste ein WM Funktion einbauen, dass beim Löschen die Bitmap wieder in die GUI blittet.


    Zitat von Andy

    Ich würde da gerne mal mit dem Disassembler drübergucken, FB produziert imho einen "schönen" Code....


    Function mandelIter:

    Code
    .intel_syntax noprefix
    
    
    .section .text
    .balign 16
    
    
    .globl _MANDELITER@12
    _MANDELITER@12:
    push ebp
    mov ebp, esp
    sub esp, 28
    push ebx
    mov dword ptr [ebp-4], 0
    .Lt_0004:
    movss xmm7, [_Lt_0008]
    movss [ebp-8], xmm7
    mov dword ptr [ebp-12], 0
    mov dword ptr [ebp-16], 0
    mov dword ptr [ebp-20], 0
    mov dword ptr [ebp-24], 0
    mov eax, dword ptr [ebp+16]
    mov dword ptr [ebp-28], eax
    .Lt_0006:
    movss xmm6, [ebp-20]
    addss xmm6, dword ptr [ebp-16]
    comiss xmm6, dword ptr [_Lt_0009]
    setbe al
    shr eax, 1
    sbb eax, eax
    mov ebx, dword ptr [ebp-28]
    test ebx, ebx
    setg bl
    shr ebx, 1
    sbb ebx, ebx
    and eax, ebx
    je .Lt_0007
    movss xmm6, [ebp-12]
    mulss xmm6, dword ptr [ebp-8]
    movss [ebp-24], xmm6
    movss xmm6, [ebp-8]
    mulss xmm6, dword ptr [ebp-8]
    movss [ebp-16], xmm6
    movss xmm6, [ebp-12]
    mulss xmm6, dword ptr [ebp-12]
    movss [ebp-20], xmm6
    movss xmm6, [ebp-16]
    subss xmm6, dword ptr [ebp-20]
    addss xmm6, dword ptr [ebp+8]
    movss [ebp-8], xmm6
    movss xmm6, [ebp-24]
    unpcklps xmm6, xmm6
    pshufd xmm7, xmm6, 0x01
    addss xmm6, xmm7
    addss xmm6, dword ptr [ebp+12]
    movss [ebp-12], xmm6
    dec dword ptr [ebp-28]
    jmp .Lt_0006
    .Lt_0007:
    mov ebx, dword ptr [ebp+16]
    sub ebx, dword ptr [ebp-28]
    mov dword ptr [ebp-4], ebx
    .Lt_0005:
    mov eax, dword ptr [ebp-4]
    pop ebx
    mov esp, ebp
    pop ebp
    ret 12
    .balign 16
    
    
    .globl _main
    _main:
    push ebp
    mov ebp, esp
    and esp, 0xFFFFFFF0
    sub esp, 4
    mov dword ptr [ebp-4], 0
    call ___main
    push 0
    push dword ptr [ebp+12]
    push dword ptr [ebp+8]
    call _fb_Init@12
    .Lt_0002:
    .Lt_0003:
    push 0
    call _fb_End@4
    mov eax, dword ptr [ebp-4]
    mov esp, ebp
    pop ebp
    ret
    
    
    .section .data
    .balign 4
    _Lt_0008:	.long	0x00000000
    .balign 4
    _Lt_0009:	.long	0x40800000
    Alles anzeigen


    Der gesamte Code:

    Code
    .file	"Mandelbrot.c"
    	.intel_syntax noprefix
    	.section	.text.unlikely,"x"
    .LCOLDB9:
    	.text
    .LHOTB9:
    	.p2align 4,,15
    	.globl	MANDELBROT
    	.def	MANDELBROT;	.scl	2;	.type	32;	.endef
    MANDELBROT:
    .L2:
    	push	r15
    	push	r14
    	subss	xmm1, xmm0
    	push	r13
    	push	r12
    	subss	xmm3, xmm2
    	push	rbp
    	push	rdi
    	push	rsi
    	push	rbx
    	sub	rsp, 328
    	mov	eax, DWORD PTR IH$[rip]
    	movaps	XMMWORD PTR 160[rsp], xmm6
    	pxor	xmm6, xmm6
    	mov	r15d, DWORD PTR 432[rsp]
    	movaps	XMMWORD PTR 224[rsp], xmm10
    	pxor	xmm10, xmm10
    	lea	r14, 136[rsp]
    	cvtss2sd	xmm6, xmm2
    	lea	r13, 140[rsp]
    	lea	r12, 144[rsp]
    	movaps	XMMWORD PTR 192[rsp], xmm8
    	mov	DWORD PTR 96[rsp], eax
    	sub	eax, 1
    	mov	QWORD PTR 152[rsp], 0
    	movsd	QWORD PTR 104[rsp], xmm6
    	pxor	xmm6, xmm6
    	movaps	XMMWORD PTR 208[rsp], xmm9
    	mov	DWORD PTR 112[rsp], eax
    	movaps	xmm8, xmm1
    	movaps	XMMWORD PTR 176[rsp], xmm7
    	lea	rbp, 148[rsp]
    	movaps	XMMWORD PTR 240[rsp], xmm11
    	movaps	XMMWORD PTR 256[rsp], xmm12
    	movaps	XMMWORD PTR 272[rsp], xmm13
    	movaps	XMMWORD PTR 288[rsp], xmm14
    	movaps	XMMWORD PTR 304[rsp], xmm15
    	movss	DWORD PTR 116[rsp], xmm3
    	cvtss2sd	xmm10, xmm0
    	mov	eax, DWORD PTR 440[rsp]
    	mov	DWORD PTR 84[rsp], 0
    	movsd	xmm9, QWORD PTR .LC3[rip]
    	mov	QWORD PTR 120[rsp], rax
    	mov	eax, DWORD PTR IW$[rip]
    	mov	DWORD PTR 100[rsp], eax
    	movsd	xmm11, QWORD PTR .LC4[rip]
    .L3:
    	mov	ebx, DWORD PTR 100[rsp]
    	mov	edi, DWORD PTR 84[rsp]
    	xor	esi, esi
    	pxor	xmm14, xmm14
    	pxor	xmm0, xmm0
    	mov	eax, ebx
    	pxor	xmm7, xmm7
    	sub	eax, 1
    	movsd	xmm12, QWORD PTR .LC6[rip]
    	mov	DWORD PTR 80[rsp], eax
    	mov	eax, edi
    	cvtsi2ssq	xmm14, rax
    	mov	QWORD PTR 88[rsp], rax
    	mov	eax, DWORD PTR 96[rsp]
    	movsd	xmm13, QWORD PTR .LC5[rip]
    	imul	edi, ebx
    	sub	rax, 1
    	cvtsi2sdq	xmm0, rax
    	mov	eax, ebx
    	mov	ebx, r15d
    	sub	rax, 1
    	cvtsi2sdq	xmm7, rax
    	mulss	xmm14, DWORD PTR 116[rsp]
    	cvtss2sd	xmm14, xmm14
    	divsd	xmm14, xmm0
    	addsd	xmm14, QWORD PTR 104[rsp]
    	cvtsd2ss	xmm14, xmm14
    	.p2align 4,,10
    .L4:
    	pxor	xmm4, xmm4
    	mov	eax, esi
    	test	ebx, ebx
    	mov	DWORD PTR [r14], 0
    	mov	DWORD PTR 0[r13], 0
    	mov	DWORD PTR [r12], 0
    	mov	DWORD PTR 0[rbp], 0
    	cvtsi2ssq	xmm4, rax
    	mulss	xmm4, xmm8
    	cvtss2sd	xmm4, xmm4
    	divsd	xmm4, xmm7
    	addsd	xmm4, xmm10
    	cvtsd2ss	xmm4, xmm4
    	je	.L5
    	movaps	xmm3, xmm6
    	movaps	xmm2, xmm6
    	mov	ecx, ebx
    	movss	xmm5, DWORD PTR .LC2[rip]
    	.p2align 4,,10
    .L6:
    	movaps	xmm1, xmm2
    	xor	edx, edx
    	movaps	xmm0, xmm3
    	mulss	xmm1, xmm2
    	movaps	xmm15, xmm2
    	mulss	xmm0, xmm3
    	mulss	xmm15, xmm3
    	movaps	xmm2, xmm1
    	subss	xmm2, xmm0
    	movaps	xmm3, xmm15
    	addss	xmm0, xmm1
    	addss	xmm3, xmm14
    	addss	xmm2, xmm4
    	ucomiss	xmm5, xmm0
    	setnb	dl
    	xor	eax, eax
    	neg	edx
    	sub	ecx, 1
    	setne	al
    	neg	eax
    	test	edx, eax
    	jne	.L6
    .L7:
    	mov	eax, ebx
    	lea	r15d, [rdi+rsi]
    	sub	eax, ecx
    	cmp	ebx, eax
    	jnb	.L8
    	mov	rax, QWORD PTR ABITS$[rip]
    	mov	DWORD PTR [rax+r15*4], -16777216
    .L9:
    .L13:
    .L14:
    	add	esi, 1
    	cmp	DWORD PTR 80[rsp], esi
    	jnb	.L4
    .L15:
    	mov	rax, QWORD PTR 88[rsp]
    	mov	r15d, ebx
    	cqo
    	idiv	QWORD PTR 120[rsp]
    	test	rdx, rdx
    	je	.L25
    .L16:
    .L17:
    	add	DWORD PTR 84[rsp], 1
    	mov	eax, DWORD PTR 84[rsp]
    	cmp	DWORD PTR 112[rsp], eax
    	jnb	.L3
    .L18:
    	mov	rax, QWORD PTR HGFXDC$[rip]
    	mov	r9d, DWORD PTR 100[rsp]
    	xor	r8d, r8d
    	mov	rcx, QWORD PTR HDC$[rip]
    	mov	DWORD PTR 64[rsp], 13369376
    	xor	edx, edx
    	mov	DWORD PTR 56[rsp], 0
    	mov	DWORD PTR 48[rsp], 0
    	mov	QWORD PTR 40[rsp], rax
    	mov	eax, DWORD PTR 96[rsp]
    	mov	DWORD PTR 32[rsp], eax
    	call	BitBlt
    	movaps	xmm6, XMMWORD PTR 160[rsp]
    	movaps	xmm7, XMMWORD PTR 176[rsp]
    	movaps	xmm8, XMMWORD PTR 192[rsp]
    	movaps	xmm9, XMMWORD PTR 208[rsp]
    	movaps	xmm10, XMMWORD PTR 224[rsp]
    	movaps	xmm11, XMMWORD PTR 240[rsp]
    	movaps	xmm12, XMMWORD PTR 256[rsp]
    	movaps	xmm13, XMMWORD PTR 272[rsp]
    	movaps	xmm14, XMMWORD PTR 288[rsp]
    	movaps	xmm15, XMMWORD PTR 304[rsp]
    	add	rsp, 328
    	pop	rbx
    	pop	rsi
    	pop	rdi
    	pop	rbp
    	pop	r12
    	pop	r13
    	pop	r14
    	pop	r15
    	ret
    	.p2align 4,,10
    .L8:
    	pxor	xmm0, xmm0
    	cvtsi2sdq	xmm0, rax
    .L10:
    	call	log
    	movapd	xmm15, xmm0
    	mov	eax, ebx
    	pxor	xmm0, xmm0
    	mulsd	xmm15, xmm11
    	cvtsi2sdq	xmm0, rax
    	subsd	xmm0, xmm9
    	call	log
    	divsd	xmm15, xmm0
    	ucomisd	xmm15, xmm9
    	movapd	xmm0, xmm15
    	movsd	QWORD PTR 152[rsp], xmm15
    	jb	.L26
    .L11:
    	ucomisd	xmm15, xmm12
    	jnb	.L12
    	movsd	xmm1, QWORD PTR .LC5[rip]
    	mulsd	xmm0, xmm1
    	subsd	xmm0, xmm1
    	call	floor
    	cvttsd2si	rax, xmm0
    	mov	rdx, QWORD PTR ABITS$[rip]
    	sal	eax, 8
    	sub	eax, 65536
    	mov	DWORD PTR [rdx+r15*4], eax
    	jmp	.L14
    	.p2align 4,,10
    .L12:
    	mulsd	xmm0, xmm13
    	subsd	xmm0, QWORD PTR .LC7[rip]
    	call	floor
    	addsd	xmm0, QWORD PTR .LC8[rip]
    	mov	rdx, QWORD PTR ABITS$[rip]
    	cvttsd2si	rax, xmm0
    	mov	DWORD PTR [rdx+r15*4], eax
    	jmp	.L14
    	.p2align 4,,10
    .L26:
    	mulsd	xmm0, QWORD PTR .LC5[rip]
    	call	floor
    	cvttsd2si	rax, xmm0
    	mov	rdx, QWORD PTR ABITS$[rip]
    	sal	eax, 16
    	sub	eax, 16777216
    	mov	DWORD PTR [rdx+r15*4], eax
    	jmp	.L14
    .L5:
    	lea	r15d, [rdi+rsi]
    	pxor	xmm0, xmm0
    	jmp	.L10
    .L25:
    	mov	rax, QWORD PTR HGFXDC$[rip]
    	mov	r9d, DWORD PTR 100[rsp]
    	xor	r8d, r8d
    	mov	rcx, QWORD PTR HDC$[rip]
    	mov	DWORD PTR 64[rsp], 13369376
    	mov	DWORD PTR 56[rsp], 0
    	mov	DWORD PTR 48[rsp], 0
    	mov	QWORD PTR 40[rsp], rax
    	mov	eax, DWORD PTR 96[rsp]
    	mov	DWORD PTR 32[rsp], eax
    	call	BitBlt
    	mov	eax, DWORD PTR IH$[rip]
    	mov	DWORD PTR 96[rsp], eax
    	mov	eax, DWORD PTR IW$[rip]
    	mov	DWORD PTR 100[rsp], eax
    	jmp	.L17
    	.section	.text.unlikely,"x"
    .LCOLDE9:
    	.text
    .LHOTE9:
    	.section	.text.unlikely,"x"
    .LCOLDB10:
    	.text
    .LHOTB10:
    	.p2align 4,,15
    	.globl	MANDELITER
    	.def	MANDELITER;	.scl	2;	.type	32;	.endef
    MANDELITER:
    	test	r8d, r8d
    	je	.L30
    	pxor	xmm4, xmm4
    	sub	rsp, 40
    	mov	r9d, r8d
    	movaps	XMMWORD PTR [rsp], xmm6
    	movaps	xmm2, xmm4
    	movaps	XMMWORD PTR 16[rsp], xmm7
    	movss	xmm7, DWORD PTR .LC2[rip]
    	.p2align 4,,10
    .L29:
    	movaps	xmm5, xmm2
    	movaps	xmm3, xmm4
    	movaps	xmm6, xmm2
    	xor	ecx, ecx
    	mulss	xmm5, xmm2
    	mulss	xmm3, xmm4
    	mulss	xmm6, xmm4
    	movaps	xmm2, xmm5
    	subss	xmm2, xmm3
    	movaps	xmm4, xmm6
    	addss	xmm3, xmm5
    	addss	xmm4, xmm1
    	addss	xmm2, xmm0
    	ucomiss	xmm7, xmm3
    	setnb	cl
    	xor	edx, edx
    	neg	ecx
    	sub	r9d, 1
    	setne	dl
    	neg	edx
    	test	ecx, edx
    	jne	.L29
    .L28:
    	mov	eax, r8d
    	movaps	xmm6, XMMWORD PTR [rsp]
    	sub	eax, r9d
    	movaps	xmm7, XMMWORD PTR 16[rsp]
    	add	rsp, 40
    	ret
    .L30:
    	xor	eax, eax
    	ret
    	.section	.text.unlikely,"x"
    .LCOLDE10:
    	.text
    .LHOTE10:
    	.def	__main;	.scl	2;	.type	32;	.endef
    	.section .rdata,"dr"
    .LC11:
    	.ascii "\0"
    .LC12:
    	.ascii "GDI\0"
    .LC13:
    	.ascii "GDI Mandelbrot\0"
    .LC17:
    	.ascii " / Took \0"
    .LC18:
    	.ascii " seconds to render.\0"
    	.section	.text.unlikely,"x"
    .LCOLDB19:
    	.section	.text.startup,"x"
    .LHOTB19:
    	.p2align 4,,15
    	.globl	main
    	.def	main;	.scl	2;	.type	32;	.endef
    main:
    	push	rbp
    	push	rdi
    	push	rsi
    	push	rbx
    	mov	rsi, rdx
    	mov	ebx, ecx
    	sub	rsp, 456
    	movaps	XMMWORD PTR 432[rsp], xmm6
    	call	__main
    	xor	r8d, r8d
    	mov	rdx, rsi
    	mov	ecx, ebx
    	call	fb_Init
    	lea	rcx, .LC11[rip]
    	xor	edx, edx
    	mov	QWORD PTR 120[rsp], 0
    	mov	QWORD PTR 128[rsp], 0
    	lea	rsi, 272[rsp]
    	call	fb_StrAllocTempDescZEx
    	mov	QWORD PTR 48[rsp], rax
    	lea	rax, 88[rsp]
    	lea	r9, 72[rsp]
    	lea	r8, 64[rsp]
    	lea	rdx, 128[rsp]
    	lea	rcx, 120[rsp]
    	mov	QWORD PTR 40[rsp], rax
    	lea	rax, 80[rsp]
    	mov	QWORD PTR 88[rsp], 0
    	mov	QWORD PTR 80[rsp], 0
    	mov	QWORD PTR 72[rsp], 0
    	mov	QWORD PTR 32[rsp], rax
    	mov	QWORD PTR 64[rsp], 0
    	call	fb_GfxScreenInfo
    	lea	rcx, .LC12[rip]
    	mov	edx, 3
    	mov	DWORD PTR IW$[rip], 1000
    	mov	DWORD PTR IH$[rip], 600
    	call	fb_StrAllocTempDescZEx
    	mov	ecx, 103
    	mov	rdx, rax
    	call	fb_GfxControl_s
    	mov	edx, DWORD PTR IH$[rip]
    	mov	ecx, DWORD PTR IW$[rip]
    	mov	r9d, 1
    	mov	r8d, 24
    	mov	DWORD PTR 40[rsp], 0
    	mov	DWORD PTR 32[rsp], 0
    	call	fb_GfxScreenRes
    	lea	r8, .LC13[rip]
    	mov	r9d, 15
    	mov	rdx, -1
    	mov	rcx, rsi
    	mov	DWORD PTR 32[rsp], 0
    	call	fb_StrInit
    	mov	rcx, rsi
    	call	fb_GfxSetWindowTitle
    	mov	eax, 2147483648
    	lea	rdx, 136[rsp]
    	lea	r9, 104[rsp]
    	mov	QWORD PTR 112[rsp], rax
    	mov	QWORD PTR 104[rsp], rax
    	lea	r8, 96[rsp]
    	mov	QWORD PTR 96[rsp], rax
    	lea	rax, 112[rsp]
    	mov	ecx, 2
    	mov	QWORD PTR 136[rsp], 0
    	mov	QWORD PTR 32[rsp], rax
    	call	fb_GfxControl_i
    	mov	rcx, QWORD PTR 136[rsp]
    	call	GetDC
    	lea	rdx, 304[rsp]
    	mov	r10, rax
    	mov	QWORD PTR HDC$[rip], rax
    	mov	ecx, 15
    	xor	eax, eax
    	lea	r9, ABITS$[rip]
    	mov	rdi, rdx
    	xor	r8d, r8d
    	rep stosq
    	mov	eax, DWORD PTR IW$[rip]
    	mov	ecx, 32
    	mov	DWORD PTR 304[rsp], 124
    	mov	WORD PTR 318[rsp], cx
    	mov	rcx, r10
    	mov	DWORD PTR 320[rsp], 3
    	mov	DWORD PTR 356[rsp], -16777216
    	mov	DWORD PTR 344[rsp], 16711680
    	mov	DWORD PTR 308[rsp], eax
    	mov	eax, DWORD PTR IH$[rip]
    	mov	DWORD PTR 348[rsp], 65280
    	mov	DWORD PTR 352[rsp], 255
    	mov	DWORD PTR [rdi], 0
    	mov	DWORD PTR 40[rsp], 0
    	neg	eax
    	mov	QWORD PTR 32[rsp], 0
    	mov	DWORD PTR 312[rsp], eax
    	mov	eax, 1
    	mov	WORD PTR 316[rsp], ax
    	call	CreateDIBSection
    	mov	rcx, QWORD PTR HDC$[rip]
    	mov	rdi, rax
    	call	CreateCompatibleDC
    	mov	rdx, rdi
    	mov	rcx, rax
    	mov	QWORD PTR HGFXDC$[rip], rax
    	call	SelectObject
    	mov	QWORD PTR 144[rsp], 0
    	mov	rbp, rax
    	mov	QWORD PTR 152[rsp], 0
    	mov	DWORD PTR 160[rsp], 0
    	call	fb_Timer
    	movss	xmm3, DWORD PTR .LC14[rip]
    	mov	DWORD PTR 40[rsp], 100
    	movaps	xmm1, xmm3
    	mov	DWORD PTR 32[rsp], 5000
    	movapd	xmm6, xmm0
    	movss	xmm2, DWORD PTR .LC15[rip]
    	movss	xmm0, DWORD PTR .LC16[rip]
    	call	MANDELBROT
    	call	fb_Timer
    	subsd	xmm0, xmm6
    	call	fb_DoubleToStr
    	lea	rcx, 176[rsp]
    	lea	r9, .LC17[rip]
    	mov	r8, -1
    	mov	rdx, rsi
    	mov	QWORD PTR 32[rsp], 9
    	mov	rbx, rax
    	mov	QWORD PTR 176[rsp], 0
    	mov	QWORD PTR 184[rsp], 0
    	mov	QWORD PTR 192[rsp], 0
    	call	fb_StrConcat
    	lea	rcx, 208[rsp]
    	mov	r9, rbx
    	mov	r8, -1
    	mov	rdx, rax
    	mov	QWORD PTR 32[rsp], -1
    	mov	QWORD PTR 208[rsp], 0
    	mov	QWORD PTR 216[rsp], 0
    	mov	QWORD PTR 224[rsp], 0
    	lea	rbx, 144[rsp]
    	call	fb_StrConcat
    	lea	rcx, 240[rsp]
    	lea	r9, .LC18[rip]
    	mov	r8, -1
    	mov	rdx, rax
    	mov	QWORD PTR 32[rsp], 20
    	mov	QWORD PTR 240[rsp], 0
    	mov	QWORD PTR 248[rsp], 0
    	mov	QWORD PTR 256[rsp], 0
    	call	fb_StrConcat
    	mov	rcx, rax
    	call	fb_GfxSetWindowTitle
    	jmp	.L35
    	.p2align 4,,10
    .L50:
    	cmp	eax, 1
    	je	.L38
    .L36:
    .L39:
    .L40:
    .L41:
    	mov	ecx, 30
    	call	fb_Sleep
    .L35:
    	mov	rcx, rbx
    	call	fb_GfxEvent
    	test	eax, eax
    	je	.L41
    	mov	eax, DWORD PTR 144[rsp]
    	cmp	eax, 13
    	jne	.L50
    .L38:
    	mov	rcx, QWORD PTR HGFXDC$[rip]
    	mov	rdx, rbp
    	call	SelectObject
    	mov	rdx, QWORD PTR HDC$[rip]
    	mov	rcx, QWORD PTR 136[rsp]
    	call	ReleaseDC
    	mov	rcx, QWORD PTR HGFXDC$[rip]
    	call	DeleteDC
    	mov	rcx, rdi
    	call	DeleteObject
    	mov	rcx, rsi
    	call	fb_StrDelete
    	xor	ecx, ecx
    	call	fb_End
    	movaps	xmm6, XMMWORD PTR 432[rsp]
    	add	rsp, 456
    	pop	rbx
    	xor	eax, eax
    	pop	rsi
    	pop	rdi
    	pop	rbp
    	ret
    	.section	.text.unlikely,"x"
    .LCOLDE19:
    	.section	.text.startup,"x"
    .LHOTE19:
    .lcomm HGFXDC$,8,8
    .lcomm ABITS$,8,8
    .lcomm HDC$,8,8
    .lcomm IH$,4,4
    .lcomm IW$,4,4
    	.section .rdata,"dr"
    	.align 4
    .LC2:
    	.long	1082130432
    	.align 8
    .LC3:
    	.long	0
    	.long	1072693248
    	.align 8
    .LC4:
    	.long	0
    	.long	1074266112
    	.align 8
    .LC5:
    	.long	0
    	.long	1081073664
    	.align 8
    .LC6:
    	.long	0
    	.long	1073741824
    	.align 8
    .LC7:
    	.long	0
    	.long	1082122240
    	.align 8
    .LC8:
    	.long	-536870912
    	.long	1106247679
    	.align 4
    .LC14:
    	.long	1065353216
    	.align 4
    .LC15:
    	.long	-1082130432
    	.align 4
    .LC16:
    	.long	-1073741824
    	.ident	"GCC: (x86_64-win32-sjlj-rev0, Built by MinGW-W64 project) 5.2.0"
    	.def	BitBlt;	.scl	2;	.type	32;	.endef
    	.def	log;	.scl	2;	.type	32;	.endef
    	.def	floor;	.scl	2;	.type	32;	.endef
    	.def	fb_Init;	.scl	2;	.type	32;	.endef
    	.def	fb_StrAllocTempDescZEx;	.scl	2;	.type	32;	.endef
    	.def	fb_GfxScreenInfo;	.scl	2;	.type	32;	.endef
    	.def	fb_GfxControl_s;	.scl	2;	.type	32;	.endef
    	.def	fb_GfxScreenRes;	.scl	2;	.type	32;	.endef
    	.def	fb_StrInit;	.scl	2;	.type	32;	.endef
    	.def	fb_GfxSetWindowTitle;	.scl	2;	.type	32;	.endef
    	.def	fb_GfxControl_i;	.scl	2;	.type	32;	.endef
    	.def	GetDC;	.scl	2;	.type	32;	.endef
    	.def	CreateDIBSection;	.scl	2;	.type	32;	.endef
    	.def	CreateCompatibleDC;	.scl	2;	.type	32;	.endef
    	.def	SelectObject;	.scl	2;	.type	32;	.endef
    	.def	fb_Timer;	.scl	2;	.type	32;	.endef
    	.def	fb_DoubleToStr;	.scl	2;	.type	32;	.endef
    	.def	fb_StrConcat;	.scl	2;	.type	32;	.endef
    	.def	fb_Sleep;	.scl	2;	.type	32;	.endef
    	.def	fb_GfxEvent;	.scl	2;	.type	32;	.endef
    	.def	ReleaseDC;	.scl	2;	.type	32;	.endef
    	.def	DeleteDC;	.scl	2;	.type	32;	.endef
    	.def	DeleteObject;	.scl	2;	.type	32;	.endef
    	.def	fb_StrDelete;	.scl	2;	.type	32;	.endef
    	.def	fb_End;	.scl	2;	.type	32;	.endef
    Alles anzeigen

    Kompiliert mit folgenden Parametern: fbc -s gui -RR -fpu SSE -vec 2 "Mandelbrot.bas"

    Wenn ich den Code als 64-bit kompiliere, dann wird die Mandelbrot Grafik rund dargestellt! ?(

    Zitat von Andy

    Auch im Hinblick auf auf weitere "Battles" hätte ich gerne Anwendungen gesehen, welche von den bei FB und AutoIt gleich schnell ausgeführten API-Funktionen (ist das so?) abhängig sind.

    Du meinst also, dass ich z.B. eine GDI+ Code in FB umwandeln soll. Kann ich machen, aber mit großer Wahrscheinlichkeit wird der Unterschied nicht mehr so immens sein, da die GDI+ Calls ausbremsen.


    Zitat von Andy

    In FB sollten imho auch Arrayfunktionen (Arraysort bspw) wesentlich schneller arbeiten.

    Ich habe für die _GDIPlus_BitmapApplyFilter DLL ein ArraySort benötigt, aber habe keine native FB Funktion gefunden. Entweder bin ich blind oder zu blöd zum Suchen.
    Zum Sortieren von Arrays habe ich eine WinAPI Funktion verwendet: QSort.
    Das wurde auch in AutoIt bereits umgesetzt.

    _ArraySortClib:

    AutoIt
    ; http://www.autoitscript.com/forum/index.php?showtopic=63525&view=findpost&p=474072
    ;===============================================================================
    ; Function Name:    _ArraySortClib() v4
    ; Description:       Sort 1D/2D array using qsort() from C runtime library
    ; Syntax:
    ; Parameter(s):   $Array - the array to be sorted, ByRef
    ;                   $iMode - sort mode, can be one of the following:
    ;                       0 = numerical, using double precision float compare
    ;                       1 = string sort, case insensitive (default)
    ;                       2 = string sort, case sensitive
    ;                       3 = word sort, case insensitive - compatible with AutoIt's native compare
    ;                   $fDescend - sort direction. True = descending, False = ascending (default)
    ;                   $iStart - index of starting element (default 0 = $array[0])
    ;                   $iEnd - index of ending element (default 0 = Ubound($array)-1)
    ;                   $iColumn - index of column to sort by (default 0 = first column)
    ;                   $iStrMax - max string length of each array element to compare (default 4095 chars)
    ; Requirement(s):    msvcrt.dll (shipped with Windows since Win98 at least), 32-bit version of AutoIt
    ; Return Value(s):    Success = Returns 1
    ;                   Failure = Returns 0 and sets error:
    ;                       @error 1 = invalid array
    ;                       @error 2 = invalid param
    ;                       @error 3 = dll error
    ;                       @error 64 = 64-bit AutoIt unsupported
    ; Author(s):   Siao
    ; Modification(s): KaFu, added three global _MemVirtualAlloc() calls to top of script to prevent DEP Errors:
    ;
    ; Global $pEnumProc_ArraySortClib_Mem1 = _MemVirtualAlloc(0, 64, $MEM_COMMIT, $PAGE_EXECUTE_READWRITE) ; needed for _ArraySortClib()
    ; Global $pEnumProc_ArraySortClib_Mem2 = _MemVirtualAlloc(0, 64, $MEM_COMMIT, $PAGE_EXECUTE_READWRITE) ; needed for _ArraySortClib()
    ; Global $pEnumProc_ArraySortClib_Mem3 = _MemVirtualAlloc(0, 36, $MEM_COMMIT, $PAGE_EXECUTE_READWRITE) ; needed for _ArraySortClib()
    ;
    ;===============================================================================
    
    
    Func _ArraySortClib(ByRef $array, $iMode = 1, $fDescend = False, $iStart = 0, $iEnd = 0, $iColumn = 0, $iStrMax = 4095)
        If @AutoItX64 Then Return SetError(64, 0, 0)
        Local $iArrayDims = UBound($array, 0)
        If @error Or $iArrayDims > 2 Then Return SetError(1, 0, 0)
        Local $iArraySize = UBound($array, 1), $iColumnMax = UBound($array, 2)
        If $iArraySize < 2 Then Return SetError(1, 0, 0)
        If $iEnd < 1 Or $iEnd > $iArraySize - 1 Then $iEnd = $iArraySize - 1
        If ($iEnd - $iStart < 1) Then
            ; ConsoleWrite("- _ArraySortClib ERROR: #1 - " & ($iEnd - $iStart < 1) & @tab & ($iEnd - $iStart) & @crlf)
            Return SetError(2, 0, 0)
        EndIf
        If $iArrayDims = 2 And ($iColumnMax - $iColumn < 0) Then
            ; ConsoleWrite("- _ArraySortClib ERROR: #2 - " & $iArrayDims & @tab & ($iColumnMax - $iColumn < 0) & @tab & ($iColumnMax - $iColumn) & @crlf)
            Return SetError(2, 0, 0)
        EndIf
        If $iStrMax < 1 Then
            ; ConsoleWrite("- _ArraySortClib ERROR: #3 - " & $iStrMax & @crlf)
            Return SetError(2, 0, 0)
        EndIf
        Local $i, $j, $iCount = $iEnd - $iStart + 1, $fNumeric, $aRet, $sZero = ChrW(0), $sStrCmp, $sBufType = 'byte[', $tSource, $tIndex, $tFloatCmp
    
    
        Local $tEnumProc = DllStructCreate('byte[64]', $pEnumProc_ArraySortClib_Mem1)
        Local $tCmpWrap = DllStructCreate('byte[64]', $pEnumProc_ArraySortClib_Mem2)
    
    
        If $h_DLL_msvcrt = -1 Then Return SetError(3, 0, 0)
    
    
        ;; initialize compare proc
        Switch $iMode
            Case 0
                $fNumeric = True
                $tFloatCmp = DllStructCreate('byte[36]', $pEnumProc_ArraySortClib_Mem3)
                DllStructSetData($tFloatCmp, 1, '0x8B4C24048B542408DD01DC1ADFE0F6C440750D80E441740433C048C333C040C333C0C3')
                DllStructSetData($tCmpWrap, 1, '0xBA' & Hex(Binary(DllStructGetPtr($tFloatCmp)), 8) & '8B4424088B4C2404FF30FF31FFD283C408C3')
                DllStructSetData($tEnumProc, 1, '0x8B7424048B7C24088B4C240C8B442410893789470483C60883C708404975F1C21000')
            Case 1, 2
                $sStrCmp = "_strcmpi" ;case insensitive
                If $iMode = 2 Then $sStrCmp = "strcmp" ;case sensitive
                $aRet = DllCall($h_DLL_Kernel32, 'ptr', 'GetModuleHandle', 'str', 'msvcrt.dll')
                $aRet = DllCall($h_DLL_Kernel32, 'ptr', 'GetProcAddress', 'ptr', $aRet[0], 'str', $sStrCmp)
                ;If $aRet[0] = 0 Then Return SetError(3, 0, 0 * DllClose($h_DLL_msvcrt))
                If $aRet[0] = 0 Then Return SetError(3, 0, 1)
                DllStructSetData($tCmpWrap, 1, '0xBA' & Hex(Binary($aRet[0]), 8) & '8B4424088B4C2404FF30FF31FFD283C408C3')
                DllStructSetData($tEnumProc, 1, '0x8B7424048B7C24088B4C240C8B542410893789570483C7088A064684C075F9424975EDC21000')
            Case 3
                $sBufType = 'wchar['
                $aRet = DllCall($h_DLL_Kernel32, 'ptr', 'GetModuleHandle', 'str', 'kernel32.dll')
                $aRet = DllCall($h_DLL_Kernel32, 'ptr', 'GetProcAddress', 'ptr', $aRet[0], 'str', 'CompareStringW')
                ;If $aRet[0] = 0 Then Return SetError(3, 0, 0 * DllClose($h_DLL_msvcrt))
                If $aRet[0] = 0 Then Return SetError(3, 0, 1)
                DllStructSetData($tCmpWrap, 1, '0xBA' & Hex(Binary($aRet[0]), 8) & '8B4424088B4C24046AFFFF306AFFFF3168000000006800040000FFD283E802C3')
                DllStructSetData($tEnumProc, 1, '0x8B7424048B7C24088B4C240C8B542410893789570483C7080FB70683C60285C075F6424975EAC21000')
            Case Else
    
    
                Return SetError(2, 0, 0)
        EndSwitch
        ;; write data to memory
        If $fNumeric Then
            $tSource = DllStructCreate('double[' & $iCount & ']')
            If $iArrayDims = 1 Then
                For $i = 1 To $iCount
                    DllStructSetData($tSource, 1, $array[$iStart + $i - 1], $i)
                Next
            Else
                For $i = 1 To $iCount
                    DllStructSetData($tSource, 1, $array[$iStart + $i - 1][$iColumn], $i)
                Next
            EndIf
        Else
            Local $sMem = ""
            If $iArrayDims = 1 Then
                For $i = $iStart To $iEnd
                    $sMem &= StringLeft($array[$i], $iStrMax) & $sZero
                Next
            Else
                For $i = $iStart To $iEnd
                    $sMem &= StringLeft($array[$i][$iColumn], $iStrMax) & $sZero
                Next
            EndIf
            $tSource = DllStructCreate($sBufType & StringLen($sMem) + 1 & ']')
            DllStructSetData($tSource, 1, $sMem)
            $sMem = ""
        EndIf
        ;; index data
        $tIndex = DllStructCreate('int[' & $iCount * 2 & ']')
        DllCall($h_DLL_user32, 'uint', 'CallWindowProc', 'ptr', DllStructGetPtr($tEnumProc), 'ptr', DllStructGetPtr($tSource), 'ptr', DllStructGetPtr($tIndex), 'int', $iCount, 'int', $iStart)
        ;; sort
        DllCall($h_DLL_msvcrt, 'none:cdecl', 'qsort', 'ptr', DllStructGetPtr($tIndex), 'int', $iCount, 'int', 8, 'ptr', DllStructGetPtr($tCmpWrap))
        ;DllClose($h_DLL_msvcrt)
        ;; rearrange the array by sorted index
        Local $aTmp = $array, $iRef
        If $iArrayDims = 1 Then ; 1D
            If $fDescend Then
                For $i = 0 To $iCount - 1
                    $iRef = DllStructGetData($tIndex, 1, $i * 2 + 2)
                    $array[$iEnd - $i] = $aTmp[$iRef]
                Next
            Else ; ascending
                For $i = $iStart To $iEnd
                    $iRef = DllStructGetData($tIndex, 1, ($i - $iStart) * 2 + 2)
                    $array[$i] = $aTmp[$iRef]
                Next
            EndIf
        Else ; 2D
            If $fDescend Then
                For $i = 0 To $iCount - 1
                    $iRef = DllStructGetData($tIndex, 1, $i * 2 + 2)
                    For $j = 0 To $iColumnMax - 1
                        $array[$iEnd - $i][$j] = $aTmp[$iRef][$j]
                    Next
                Next
            Else ; ascending
                For $i = $iStart To $iEnd
                    $iRef = DllStructGetData($tIndex, 1, ($i - $iStart) * 2 + 2)
                    For $j = 0 To $iColumnMax - 1
                        $array[$i][$j] = $aTmp[$iRef][$j]
                    Next
                Next
            EndIf
        EndIf
        Return 1
    EndFunc   ;==>_ArraySortClib
    Alles anzeigen
  • Battle: Autoit vs. FreeBasic - Runde 1+2+3

    • UEZ
    • 4. August 2016 um 23:28
    Zitat von Andy

    BTT, wann kommt der 2. Teil von "AutoIt vs FreeBasic"


    Bitte sehr.

    Wen wundert's - keine Überraschung. ^^

  • Revision 2017 und die Schnitzeljagd

    • UEZ
    • 2. August 2016 um 17:45

    Andy: wenn du gesagt hättest, lass' uns eine 3D Engine coden, dann hätte ich "ok, von mir aus" gesagt, aber HW Bastelei, da kann ich nicht mitreden.

    Das ist nicht meine Welt und während des Studiums hatte ich "Bastelei" nicht besonders gemocht. Nichtsdestotrotz, wenn ich irgendwie unterstützen kann, dann gerne. :D

    Idee ist trotzdem interessant. :rock:

  • Battle: Autoit vs. FreeBasic - Runde 1+2+3

    • UEZ
    • 31. Juli 2016 um 12:32
    Zitat von Andy

    BTT, wann kommt der 2. Teil von "AutoIt vs FreeBasic"

    Ich muss mal sehen, was in AutoIt so einigermaßen läuft. Dieses Beispiel mit 1000 Pixel bei 15 FPS ist recht ordentlich für AutoIt Verhältnisse, wobei der Effekt erst ab 5000 Pixel zur Geltung kommt.

    Wer ist der Gewinner von Runde 1? ;)

  • Battle: Autoit vs. FreeBasic - Runde 1+2+3

    • UEZ
    • 30. Juli 2016 um 21:33

    Leider gibt es keinen Lead Coder mehr und dadurch ist die Entwicklung stehengeblieben :( . Es werden i.d.R. nur Bugs gefixt, aber sonst passiert leider nichts mehr und wie es aussieht, wird auch nicht mehr viel passieren.

    Jon hat andere Interessen und die Community "dümpelt" vor sich hin.

    Wer mit grafischen Spielereien zu tun hat, wird schnell feststellen, dass die Grenzen von AutoIt sehr schnell erreicht werden können. Das impliziert, ja sogar schreit förmlich, nach Methoden, um die Rechenoperation zu beschleunigen.
    Eine Variante ist Inline ASM, eine andere zeitkritische Berechnungen in eine DLL auszulagern. Da Frage ich mich, warum ich nicht gleich komplett umsteigen soll, z.B. die "brotlose Kunst" gleich in FB zu schreiben.

    Je mehr ich mit FB arbeite, desto mehr gefällt es mir, denn FB hat mehr oder weniger alles, was man benötigt. Man kann auch andere Kompiler einbinden, z.B. wie bereits oben erwähnt wurde LLVM-IR.

    Ich werde wohl den grafischen Schnick-Schnack nur noch in FB coden, denn außer GDI / GDI+ sind auch andere Schnittstellen, wie OpenGL implementiert + Inline ASM.

  • Battle: Autoit vs. FreeBasic - Runde 1+2+3

    • UEZ
    • 29. Juli 2016 um 10:54
    Zitat von Xorianator

    Meinst du das von FB im Falle von MT, oder meinst du es ist nicht ganz trivial, das mit Threads umzusetzen?

    Ich denke, dass MT generell nicht ganz einfach ist, da der Speicher, muss R/W fähig sein, zwischen den Threads geshared sein muss. Ich weiß, dass Eukalyptus ein sehr gutes MT Beispiel in FB gepostet hatte, das ein Bild in Graustufen umwandelt. Mein Partikel Beispiel ist im Prinzip sehr ähnlich, da die ARGB Werte direkt in die Bitmap geschrieben werden, ohne den Gebrauch von API Funktionen.

    Das MT Beispiel im FB Forum ist ein super Beispiel, wie MT nicht gecodet werden sollte. :D

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™