suche stoppen, wie?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
sen-me
Beiträge: 478
Registriert: 17.07.2005 16:02
Wohnort: Saarbrücken
Kontaktdaten:

suche stoppen, wie?

Beitrag von sen-me »

also ich hab mir jetzt ne Procedur gebaut die ordner für ordner durchgeht und nach datein sucht

aber wie kann ich die suche vorzeitig beenden? d.h. die procedure tut sich ja rekursiv aufrufen, d.h. ich muss irgendwie ne block in die procedure machen

ich hab schon versucht mit ner globalen variable zu machen, aber wenn ich auf den button klcike der das stopt, wird erst nach der suche die variable auf 1 gesetzt
Bild
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Speicher in der Procedure eine Variable, wo drin steht, wie der erste ordner / die erste Datei hieß, die er gefunden hat.

Die Prozedur ruft sich nur solange rekursiv auf, bis er wieder auf die Datei stößt, die du in der variablen drin hast.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag von Batze »

Vielleicht über den Rückgabewert der Prozedur.
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
Benutzeravatar
sen-me
Beiträge: 478
Registriert: 17.07.2005 16:02
Wohnort: Saarbrücken
Kontaktdaten:

Beitrag von sen-me »

O.o

die procedure gibt keinen rückwert, sie schreibt ihre funde in eine liste

d.h, sie ruft sich solange auf bis sie bis in die letzte lücke des angegeben pfads durchforsten hat.

aber irgendwie muss ich doch die rekusion stoppen
Bild
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag von bobobo »

Ruf die Procedure mal als Thread auf.

siehe dazu in der Hilfe unter Thread

Du kannst vor jeder Suche nach dem Inhalt einer globalen Variable
checken .. und im Thread entsprechend reagieren.

Code: Alles auswählen

Global quit.l
Procedure machwas()
  Repeat
  Debug "ich mach was"+Str(quit)
  Delay(20)
  Until quit=1
EndProcedure

quit=0
MessageRequester("","thread wird gestartet",0)
tid=CreateThread(@machwas(),0)
MessageRequester("","das ding läuft",0)
quit=1
MessageRequester("","das ding läuft nicht mehr",0)
End
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
Konne
Beiträge: 764
Registriert: 30.03.2005 02:20
Kontaktdaten:

Beitrag von Konne »

Wenn deine Procedure keinen Prukgabewert hat, dann must du haslt einen einbauen.
ZB SDchaut dir Procedureimmer wenn ihre Erstellte Procedure beendet ist ob 1 oder 0 zurückgegeben wurde und beendet sich dann auch wenn es Nulkl ist und gibt wieder 0 zurück usw...
Benutzeravatar
sen-me
Beiträge: 478
Registriert: 17.07.2005 16:02
Wohnort: Saarbrücken
Kontaktdaten:

Beitrag von sen-me »

wenn ich mit threa dmach sagt er mir Invalid memory access
Bild
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag von bobobo »

komisch .. mein demo da oben läuft ohne invalid memory error
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
sen-me
Beiträge: 478
Registriert: 17.07.2005 16:02
Wohnort: Saarbrücken
Kontaktdaten:

Beitrag von sen-me »

ich habs ja direkt eingebaut ^^


er bringt das aber bei jedme testlauf (neu testen) imemr an ner andren stelle O.o



edit:
vielleicht liegts daran das ich in dieser procedur die selbe procedur (rekursiv) nochmal aufrufe? und das öfters
Bild
Benutzeravatar
HeX0R
Beiträge: 3042
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Beitrag von HeX0R »

Debugger-Ausgaben in Threads sollte man nicht wirklich machen.
Irgendwann wird das zwangsläufig immer in einem Invalid memory access Error resultieren.

Um beim Thema zu bleiben:
Das mit dem Rückgabewert ist eigentlich perfekt.

P.S.: Kann man mich eigentlich verstehen, oder muss ich auch soviele Fehler eintippen ? :lol:
Antworten