Bin ratlos wegen einer IF abfrage

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Tsuki-Namida
Beiträge: 633
Registriert: 17.11.2005 13:27
Kontaktdaten:

Bin ratlos wegen einer IF abfrage

Beitrag von Tsuki-Namida »

Hallo,
ich habe einen thrend erstellt und habe darinne einige if abfragen nur in die erste komme ich nicht rein obwohl ich die bedingung erfülle....

Code: Alles auswählen

Debug "Thrend läuft"
  Repeat
    If Stream$
    Debug "Stream$ = <>''''"
    
      Info$ = PeekS(CallFunction(1,"IdTag"))
      Debug Info$
      Info$ = Winamp_GetFileInfo(Stream$,length_adr) + " " + Info$
      Delay(2000)
      If Info$ <> StreamInfo$
        Debug "Info$ = <> StreamInfo$"
        StreamInfo$ = Info$
        SetGadgetText(#Info, Info$)
        
      EndIf
    EndIf
  Until a=1
das ist die if abfrage "If Stream$"
ich habe es auch schon so versucht "If Stream$ <> """

ich habe den string
Nehr mal verglichen ob er auch stimmt und dem ist so... und global ist er auch :(
Bild
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Bin ratlos wegen einer IF abfrage

Beitrag von Kiffi »

Magix-Soft <Kain> hat geschrieben:ich habe einen thrend erstellt
einen was?
Magix-Soft <Kain> hat geschrieben:nur in die erste komme ich nicht rein

Code: Alles auswählen

If Stream$
ja, dann ist Stream$ nicht leer.

Mensch, Magix-Soft <Kain>, das kann man auch mal eben selber überprüfen,
indem man den Inhalt von Stream$ im Debug-Fenster ausgibt. Wo ist denn
jetzt da Dein Problem.

Grüße ... Kiffi
a²+b²=mc²
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

die abfrage "If Stream$" ist generell fragwürdig, da sie abfragt, ob der pointer ungleich null ist.
ich würde jetzt nicht meine hand dafür ins feuer legen, dass ein leerer string immer einen nullpointer hat.

mit threads und strings ist das alles nich so einfach.
hast du denn "threadsicher" eingeschaltet in den compileroptionen?
nimm lieber eine numerische flag-variable.
Kiffi hat geschrieben:...das kann man auch mal eben selber überprüfen,
indem man den Inhalt von Stream$ im Debug-Fenster ausgibt.
ganz genau.
mach das halt außerhalb des Ifs in deiner repeat-schleife.
außerdem solltest du das delay auch generell außerhalb der Ifs einbaun,
sonst brät der thread deine CPU solange die bedingung nicht erfüllt ist.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Tsuki-Namida
Beiträge: 633
Registriert: 17.11.2005 13:27
Kontaktdaten:

Beitrag von Tsuki-Namida »

ich habe es ja nicht nur mir "If Stream$" versucht sondern auch mir "If Stram$ <> "" "
und bei beiden geht es nicht....
den string lasse ich über das debug fenster ausgeben und zwar gleich nach dem er gefüllt wird das ist in dem treand nicht zu sehen....

und wie gesagt global ist der string auch
Bild
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

Magix-Soft <Kain> hat geschrieben:den string lasse ich über das debug fenster ausgeben und zwar gleich nach dem er gefüllt wird
Nein. Gib ihn direkt vor Deiner Abfrage aus. Dann kannst Du sofort sehen,
warum die Abfrage nicht wie erwartet funktioniert und was letztendlich in
Stream$ steht.

Noch ein Tipp: Um evtl. Leerzeichen nicht zu übersehen, solltest Du den
Inhalt von Stream$ so ausgeben lassen:

Code: Alles auswählen

Debug ">" + Stream$ + "<"
Magix-Soft <Kain> hat geschrieben:das ist in dem treand nicht zu sehen....
nochmal: Es heißt Thread und nicht treand oder thrend. Gewöhn Dir an,
die Begriffe richtig zu benennen.

Und hier ein weiterer Tipp:
ich habe es ja nicht nur mir "If Stream$" versucht sondern auch mir "If Stram$ <> "" "
Deinen Postings beinhalten ziemlich viele Tippfehler. Es ist daher nicht
auszuschließen, dass Du auch in Deinem Code Tippfehler hast. Wenn Du
also Stram$ befülllst, jedoch auf Stream$ prüfst, sind schwer
lokalisierbare Fehler vorprogrammiert. Schreib deshalb in die erste Zeile
Deines Codes generell ein

Code: Alles auswählen

EnableExplicit
Das verringert die Gefahr von Tippfehlern enorm. Alles weitere kannst Du
in der Hilfe nachlesen.

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
PureBasic4.0
Beiträge: 785
Registriert: 29.10.2006 17:26
Wohnort: 127.0.0.1

Beitrag von PureBasic4.0 »

Jetzt mal ne ganz "billige" Anfängerfrage: Hast du denn den String geGlobalt?
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
Benutzeravatar
Tsuki-Namida
Beiträge: 633
Registriert: 17.11.2005 13:27
Kontaktdaten:

Re: Bin ratlos wegen einer IF abfrage

Beitrag von Tsuki-Namida »

Magix-Soft <Kain> hat geschrieben:ich habe den string
Nehr mal verglichen ob er auch stimmt und dem ist so... und global ist er auch :(
der String stimmt immer überhein das habe ich nach geprüft... und globaö ist er auch <siehe ersten beitrag>
Bild
Benutzeravatar
uweb
Beiträge: 461
Registriert: 13.07.2005 08:39

Beitrag von uweb »

Vielleicht macht es Sinn das Problem zu separieren - ein möglichst kleines Dummyprogramm zu schreiben.

Wenn das Problem darin auftritt könntest Du es posten und wir könnten es nachvollziehen. Wenn das Problem darin nicht auftritt könntest Du nach den Unterschieden suchen, das Programm schrittweise erweitern und wenn dann das Problem darin auftritt ...(von vorne)

Zumindest geht es mir so, daß ich manchmal den Wald vor lauter Bäumen nicht mehr sehe. Die Methode hilft dann meistens.
Benutzeravatar
Thalius
Beiträge: 476
Registriert: 17.02.2005 16:17
Wohnort: Basel / Schweiz

Beitrag von Thalius »

Also rein theoretisch sollte das funktionieren... /:->

Debug dir mal den string ausserhalb der IF abfrage damit du ne Ahnung hast was da ankommt.

Ansonsten probiers mal mit nem:

Code: Alles auswählen

if len(Stream$) > 1
...
oder ähnlich ..

Thalius
Antworten