Jump to content

Sky Slate Blueberry Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate
Photo

Script(e) brechen ohne Fehler ab



  • Please log in to reply
24 replies to this topic
nnnik
  • Members
  • 1625 posts
  • Last active: Jan 24 2019 02:19 PM
  • Joined: 28 Jul 2012

Gut aber der normale Stack wird's dann wohl nicht sein.


Visit the new forum ahkscript.org.

http://ahkscript.org


Seidenweber
  • Moderators
  • 638 posts
  • Last active: Sep 06 2015 01:51 PM
  • Joined: 10 May 2011

Gut aber der normale Stack wird's dann wohl nicht sein.


Was ist denn bitte "der normale Stack"?
 
In meiner Unkenntnis stelle ich mir das ganz laienhaft so vor, dass AHK für die Speicherung von Rücksprungadressen einen Adressraum reserviert, der in diesem Beispiel überschritten wird, weshalb auf eine Adresse außerhalb dieses Adressbereichs zugegriffen wird. Wie in vermutlich jeder anderen Sprache auch, endet das in einem Crash, der mehr oder weniger lautlos erfolgt.


All questions & answers are related to AHK 1.1.19.03 x64 Unicode

 


Martel
  • Members
  • 24 posts
  • Last active: Sep 13 2015 07:57 AM
  • Joined: 02 Feb 2013

Das ist interessant. 

 

Das bedeutet: kein gosub, und die Welt ist in Ordnung?

 

Ich teste das jetzt mal. Spiele ohnehin gerade wieder mit dem Script rum.

 

Aber wie komme ich ohne ein gosub zu meinen Bedingungen ?

 

Sprich:  Was tuen wenn der Stream schon läuft? Etc. Oder mache ich etwas falsch bei den gosub ?



nnnik
  • Members
  • 1625 posts
  • Last active: Jan 24 2019 02:19 PM
  • Joined: 28 Jul 2012

Es gibt einen Stack der auf Hardware-level schon existiert :ein Register im Prozessor ist dafür vorgesehen Informationen über den Stack zu enthalten.

Dieser Stack kann wachsen und benutzt einen eigenen sogenannten Heap (Windows Speicherverwaltung).

4 GB ist die maximale Menge an Speicher die ein einzelner 32-bit Prozess haben kann.

Der Stack könnte für sich wenn er wächst also den ganzen freien Speicherplatz benutzen.

Im Falle einer Standard Autohotkey.exe 4GB-3MB, was unmengen an Speicher sind im vergleich zur Speicherung eines GoSub pointers(Ich weß immer noch nicht wie groß einer dieser Pointer genau ist.).

 

Deine Annahme ist damit wohl völlig richtig.

 

BTW Assembler ist auch heute noch auf jeden Fall einen Blick wert.

 

 

 

 

Das ist interessant.



Das bedeutet: kein gosub, und die Welt ist in Ordnung?



Ich teste das jetzt mal. Spiele ohnehin gerade wieder mit dem Script rum.



Aber wie komme ich ohne ein gosub zu meinen Bedingungen ?



Sprich: Was tuen wenn der Stream schon läuft? Etc. Oder mache ich etwas falsch bei den gosub ?

Ich würde ganz anders arbeiten.

z.B. solltest du in deinem Fall eher GoTo anstatt GoSub verwenden. (In manchen Fällen)

Ansonsten würde ich Funktionen verwenden.


Visit the new forum ahkscript.org.

http://ahkscript.org


Martel
  • Members
  • 24 posts
  • Last active: Sep 13 2015 07:57 AM
  • Joined: 02 Feb 2013

Okay, nun habe ich ein Problem.

 

So Technisch/Autohotkey mäßig bin ich ein Neandertaler.

 

Also, nicht so einer mit einer Höhle.. das währe schon zu viel.

 

 

Was bedeutet das für mein kleines Projekt? ( Aktueller Code anbei ).

 

Es ist nicht möglich? Oder ich nehme goto ( wobei ich nicht verstanden habe, was genau der Unterschied ist ).

 

Oder sollte ich das ganz anders lösen? 

 

Falls also jemand eine einfache "Höhlenmalerei" für mich hat. 

#NoEnv
#SingleInstance
#Persistent

File := "c:\stream\stream.txt"
Bild := "c:\stream\beamer.jpg"
Bildprogramm := "C:\Program Files\IrfanView\i_view32.exe"
streamlink := "C:\Users\Laptop\Desktop\stream.lnk"
randomlink := "C:\Users\Laptop\Desktop\random.lnk"


check1:

sleep, 5000
if(WinExist("Fehler"))
	gosub, killall
if(FileExist(Bild)){
	gosub killall
	gosub JPG
}
else
	gosub stream
return
	
	
	
	
	
Stream:
if(FileExist(File))
{
	Process, Exist, stream.exe
	if(ErrorLevel != 0){
		;TrayTip, VLC Stream, läuft bereits, 5
	}
	else{
		Process, Close, vlc.exe
		Sleep, 500
		Run, %streamlink%
		Process, Priority, stream.exe, H
		;TrayTip, VLC Stream, wurde gestartet, 5
	}
}
else{
	Process, Exist, vlc.exe
	if(ErrorLevel != 0){
		;TrayTip, VLC , läuft bereits, 5
	}
	else{
		Process, Close, stream.exe
		Sleep, 500
		Run, %randomlink%
		Process, Priority, vlc.exe, H
		;TrayTip, VLC , läuft bereits, 5
	}
	}
gosub check1
return


JPG:
Run , %Bildprogramm% %Bild%
WinWait, beamer.jpg - IrfanView
Send, {Enter}
Sleep, 50000
Process, Close, i_view32.exe
FileDelete, %Bild%
gosub, check1
Return


Killall:
Process, Close, i_view32.exe
Process, Close, vlc.exe
Process, Close, stream.exe
Return


strobo
  • Members
  • 359 posts
  • Last active: Mar 10 2015 08:13 PM
  • Joined: 19 Jun 2012

gosub ist okay.
gosub check1 ist das/ein Problem (weglassen!),
return kehrt zur richtigen Stelle zurück (Zeile unter dem gosub,
return wüsste nichts mit goto anzufangen),
während gosub check1 zur check1: Zeile zurückkehrt (-->Rekursion).
 


Regards,
Babba

Martel
  • Members
  • 24 posts
  • Last active: Sep 13 2015 07:57 AM
  • Joined: 02 Feb 2013

Mh, also ich habe das gosub, check1  entfernt. 

 

Und meinen Code etwas "umstrukturiert". Nun habe ich das Problem das es Funktional Kaputt ist.

 

In dieser Reihenfolge soll der Beamer Inhalt anzeigen.

 

Bild > Stream> Video

 

 

 

Wenn nun das Video läuft und der Stream startet passiert nichts mehr.

 

Ich glaube das ein Return falsch ist. Aber welches?

#NoEnv
#SingleInstance
#Persistent

File := "c:\stream\stream.txt"
Bild := "c:\stream\beamer.jpg"
Bildprogramm := "C:\Program Files\IrfanView\i_view32.exe"
streamlink := "C:\Users\Laptop\Desktop\stream.lnk"
randomlink := "C:\Users\Laptop\Desktop\random.lnk"


check1:

sleep, 5000
if(WinExist("Fehler"))
	gosub, killall
if(FileExist(Bild)){
	gosub killall
	gosub JPG
}
else
	
{	
if(FileExist(File))
{
	Process, Exist, stream.exe
	if(ErrorLevel != 0){
		;TrayTip, VLC Stream, läuft bereits, 5
	}
	else{
		Process, Close, vlc.exe
		Sleep, 500
		Run, %streamlink%
		Process, Priority, stream.exe, H
		;TrayTip, VLC Stream, wurde gestartet, 5
	}
}
else{
	Process, Exist, vlc.exe
	if(ErrorLevel != 0){
		;TrayTip, VLC , läuft bereits, 5
	}
	else{
		Process, Close, stream.exe
		Sleep, 500
		Run, %randomlink%
		Process, Priority, vlc.exe, H
		;TrayTip, VLC , läuft bereits, 5
	}
}
}
return

JPG:
Run , %Bildprogramm% %Bild%
WinWait, beamer.jpg - IrfanView
Send, {Enter}
Sleep, 50000
Process, Close, i_view32.exe
FileDelete, %Bild%
;gosub, check1
Return


Killall:
Process, Close, i_view32.exe
Process, Close, vlc.exe
Process, Close, stream.exe
Return


just me
  • Members
  • 1496 posts
  • Last active: Nov 03 2015 04:32 PM
  • Joined: 28 May 2011

Guten Morgen,

 

Du hast beim 'Aufräumen' die Schleife / Loop gleich mit entfernt und auch keinen Timer gestartet. Deshalb wird Dein Steuercode nur einmal durchlaufen. Versuche es doch einmal mit Deinem Beispiel von hier und entferne nur das GoSub, Start.

 

Edit:

 

Zumindest in der Loop sind im o.a. Beispiel Die {} Blockklammern falsch gesetzt:

loop
{
   ifWinExist, Fehler,
   {
      gosub, killall
   }
   ifExist, %Bild%
   {
      gosub killall
      gosub JPG
   }
   else
   {
      gosub stream
   }
}

Prefer ahkscript.org for the time being.


Martel
  • Members
  • 24 posts
  • Last active: Sep 13 2015 07:57 AM
  • Joined: 02 Feb 2013
Guten Morgen,

Ich habe das nun so gemacht wie Du es geschrieben hast. Basierend auf dem Beispiel vorher.

Stand - 20 Minuten Fehlerfrei.

Das lässt doch hoffen.

Ich melde mich Heute Abend noch einmal.

Martel
  • Members
  • 24 posts
  • Last active: Sep 13 2015 07:57 AM
  • Joined: 02 Feb 2013

Die versprochen Antwort.

 

 

Es läuft super! 

 

Vielen vielen dank!