Outdoor Routenplaner - Eric's Topotracker

Anwendungen, Tools, Userlibs und anderes nützliches.
e-biker
Beiträge: 4
Registriert: 21.02.2018 14:26

Re: Outdoor Routenplaner - Eric's Topotracker

Beitrag von e-biker »

DarkSoul hat geschrieben:Hab mal gaanz kurz in das Repo reingeschaut bzw. an den üblich verdächtigen Stellen für sowas debuggt. Wenn ich das richtig sehe, kommt folgende Situation gelegentlich vor:

Der Thread, der die Tiles lädt, wird sein PostEvent (z. 1196) nicht los und kommt daher innerhalb der per Mutex gesperrten "Strecke" zum Stillstand, weil der Mainthread in Zeile 1206 an der noch gesperrten Mutex auf Einlass wartet und somit nicht für das Event aus dem Thread empfangsbereit ist, so dass der Lade-Thread die Mutex nicht freigibt, damit der Mainthread weiter laufen kann, um das Event aus dem PostEvent in Empfang nehmen zu können, damit der Thread ebenfalls weiterlaufen (bzw. in diesem Fall zuende laufen) kann.


Somit blockieren sich beide Threads gegenseitig und das Programm kommt zum Stillstand, da einer der Threads der Mainthread ist. <)

Wenn man den Code bei z. 1196 herum etwas abändert, ist das Problem weg und dann läuft's sogar etwas besser.

Habe mal ein bisschen Pfuschi-Pfusch das PostEvent aus dem Mutex-Abschnitt herausgezogen, so dass diese Verklemmung nicht mehr passieren kann:

Code: Alles auswählen

LockMutex(PBMap\MemoryCacheAccessMutex)
Protected *a = PBMap\Window
Protected *b = PBmap\Gadget
UnlockMutex(PBMap\MemoryCacheAccessMutex)
PostEvent(#PB_Event_Gadget, *a, *b, #PB_MAP_TILE_CLEANUP, *Tile) ; To free memory outside the thread
Hallo,
ich habe keinen fremden Code oder Libraries benutzt sondern alles mit eigenem PB-Code entwickelt. Ehrlich gesagt wusste ich nicht mal von PBMap.
Unter Win64 läuft Topotracker bei mir in der Entwicklungsumgebung und als Anwendung stabil.
Ich benutze auch keinen Thread sondern regele das fortlaufende Zeichnen der Map über einen Eventtimer und einem Flag in der Event-Schleife.

Gruß
Erich
e-biker - Purebasic User seit 2009
Benutzeravatar
DarkSoul
Beiträge: 689
Registriert: 19.10.2006 12:51

Re: Outdoor Routenplaner - Eric's Topotracker

Beitrag von DarkSoul »

Ich benutze auch keinen Thread sondern regele das fortlaufende Zeichnen der Map über einen Eventtimer und einem Flag in der Event-Schleife.
Und so fühlt es sich leider auch an :) .

Je mehr angefordert/gezeichnet werden muss, desto träger wird das Programm.

Wenn du dicht reinzoomst und schneller durch die Map scrollst, so dass er viele Tiles laden muss, dann bricht die Performance merklich ein.

Ich empfehle dir, die Serverkommunikation und Bildmanipulationen asynchron zu machen (mit Thread), so dass im Mainthread nur noch das finale Bild in die Gadgets packen muss, sobald es fertig ist. Wenn dann die Internetverbindung hakelt oder sehr viel geladen/gerendert werden muss, bleibt die GUI trotzdem flüssig. :wink:
Bild
Benutzeravatar
Andre
PureBasic Team
Beiträge: 1754
Registriert: 11.09.2004 16:35
Computerausstattung: MacBook Core2Duo mit MacOS 10.6.8
Lenovo Y50 i7 mit Windows 10
Wohnort: Saxony / Deutscheinsiedel
Kontaktdaten:

Re: Outdoor Routenplaner - Eric's Topotracker

Beitrag von Andre »

Danke, DarkSoul :allright:

Ich komme gerade nicht dazu, das selbst in meinem Projektcode zu testen, aber ich habs im engl. Forum-Thread zu PBMap schonmal weiter gegeben... 8)
Bye,
...André
(PureBasicTeam::Docs - PureArea.net | Bestellen:: PureBasic | PureVisionXP)
Antworten