Seite 1 von 2
Map() merkwürdiges Verhalten
Verfasst: 23.09.2024 14:56
von maddinvonfritz
Hallo ich benutze für ein Projekt TreeEx von @Thorsten1867
Ich bekomme aber unregelmäßig den Fehler Die Map hat kein Aktuelles Element.
Code: Alles auswählen
Procedure DrawScrollButton_(X.i, Y.i, Width.i, Height.i, ScrollBar.s, Type.i, State.i=#False)
Define.i Color, Border
Debug "DrawScrollButton_1: " + MapKey(TreeEx())
If StartDrawing(CanvasOutput(TreeEx()\CanvasNum))
Debug "DrawScrollButton_1.1: " + MapKey(TreeEx())
DrawingMode(#PB_2DDrawing_Default)
Nach ein bisschen Debuggen bin ich auf das gestossen.
Beim ersten Debug ist die Ausgabe 25 wie es sein soll. Beim zweiten Debug kommt ein leerer String.
Hat jemand eine Idee was das sein könnte?
Bin auf Windows 10 unterwegs mit 6.11 und 6.12
Re: Map() merkwürdiges Verhalten
Verfasst: 23.09.2024 15:05
von NicTheQuick
Ein funktionierendes Beispiel um das Problem nachzuvollziehen wäre praktisch.
Deshalb kann ich nur raten: Nutzt du Threads?
Re: Map() merkwürdiges Verhalten
Verfasst: 23.09.2024 18:38
von H.Brill
Muß man diese Maps nicht erst auf Anfang setzen und dann durchhangeln, wie es in der
Hilfe auch gezeigt wird ?
Code: Alles auswählen
NewMap Country.s()
Country("US") = "United States"
Country("FR") = "France"
Country("GE") = "Germany"
ResetMap(Country())
While NextMapElement(Country())
Debug Country()
Wend
Dein Code oben gibt ja als Fragment nicht viel her.
Aufs Geradewohl zuzugreifen, denke ich eher nicht.
Re: Map() merkwürdiges Verhalten
Verfasst: 23.09.2024 19:11
von HeX0R
H.Brill hat geschrieben: 23.09.2024 18:38
Muß man diese Maps nicht erst auf Anfang setzen und dann durchhangeln, wie es in der
Hilfe auch gezeigt wird ?
Also dann wären Maps ziemlich nutzlos
Re: Map() merkwürdiges Verhalten
Verfasst: 23.09.2024 20:35
von Andre
"Durchhangeln" muss man Maps wirklich nicht, dann gäbe es für diese ja wirklich keinen sinnvollen Anwendungszwecks und man könnte verkettete (linked) Lists verwenden.
Siehe auch Beschreibung zur Map-Bibliothek - da wird auch das Thema mit den Threads (es können nicht mehrere gleichzeitig auf die Map zugreifen) im letzten Satz aufgegriffen:
https://www.purebasic.com/german/docume ... index.html
Ansonsten wie oben schon gesagt: es bräuchte ein lauffähiges Beispiel, um wirklich helfen zu können.
Re: Map() merkwürdiges Verhalten
Verfasst: 23.09.2024 21:29
von maddinvonfritz
Danke für die Antworten. Auf Threads bin ich jetzt gar nicht gekommen.
In dem Modul wird wirklich ein Thread gestartet und wenn ich diesen Auskommentiere scheint es zu laufen. Warum muss ich mir morgen mal Ansehen.
Das würde auch erklären warum der Fehler an so merkwürdigen stellen auftritt.
Re: Map() merkwürdiges Verhalten
Verfasst: 24.09.2024 13:30
von NicTheQuick
Wenn du Threads nutzt, solltest du erstens auch ThreadSafe in der Compiler-Optionen aktivieren, und zweitens einen Mutex nutzen um alle Objekte zu schützen, die von den Threads gleichzeitig benutzt werden.
Re: Map() merkwürdiges Verhalten
Verfasst: 25.09.2024 09:58
von Lord
Hallo!
Ich war nach dem Umstieg auf PB v6.11 auf ein ähnliches Problem gestoßen.
Ich habe mich beholfen mit einer Dummyzuweisung.
Vorher bei mir:
Code: Alles auswählen
ForEach Person()
If Dokumente(Person()\IDEN\ENTRY)\Kir\Birt
...
EndIf
...
Next
Danach:
Code: Alles auswählen
ForEach Person()
dummy=Dokumente(Person()\IDEN\ENTRY); <---------
If Dokumente(Person()\IDEN\ENTRY)\Kir\Birt
...
EndIf
...
Next
Ich habe da nicht weiter nachgeforscht, warum das jetzt so ist.
Hauptsache es funktionierte.
Versuch also mal einfach
Schaden kann's nicht.
Re: Map() merkwürdiges Verhalten
Verfasst: 25.09.2024 16:08
von jacdelad
Lord hat geschrieben: 25.09.2024 09:58
Hallo!
Ich war nach dem Umstieg auf PB v6.11 auf ein ähnliches Problem gestoßen.
Ich habe mich beholfen mit einer Dummyzuweisung.
Vorher bei mir:
Code: Alles auswählen
ForEach Person()
If Dokumente(Person()\IDEN\ENTRY)\Kir\Birt
...
EndIf
...
Next
Danach:
Code: Alles auswählen
ForEach Person()
dummy=Dokumente(Person()\IDEN\ENTRY); <---------
If Dokumente(Person()\IDEN\ENTRY)\Kir\Birt
...
EndIf
...
Next
Ich habe da nicht weiter nachgeforscht, warum das jetzt so ist.
Hauptsache es funktionierte.
Versuch also mal einfach
Schaden kann's nicht.
Das Problem habe ich nicht. Ich kann mir nur vorstellen, dass du, wie Nic schon anmerkte, Threads benutzt und sie nicht richtig absicherst. Kannst du ein Minimalbeispiel posten, was bei dir dieses falsche Verhalten zeigt?
Re: Map() merkwürdiges Verhalten
Verfasst: 25.09.2024 17:22
von Axolotl
Ich würde sagen, dass es kein aktuelles Element gibt, von dem der Schlüssel zurückgegeben wird. Kein aktuelles Element, dann Rückgabewert = Leerer String..
Das wäre z.B. möglich, wenn das erste Element oder ein einzelnes Element mit DeleteMapElement() gelöscht wird oder nach ResetMap() oder .....