Ich habe (wie wohl einige andere auch) das Problem, dass bei Betrieb des MN|6 zusammen mit dem POI-Warner das System regelmäßig nach einiger Zeit abstürzt (Memory allocation failure...)
Im TMCLC habe ich mir deshalb eine Protokollfunktion eingebaut, die mir regelmäßig den freien Hauptspeicher in eine Datei schreibt und dabei festgestellt, dass es immer unterhalb einer bestimmten Schwelle (in meinem Fall bei MemSize 42000) schiefgeht.
Daher habe ich die Funktion MemoryCheck so erweitert, dass bei Speicherstand unterhalb dieser Schwelle (die natürlich bei jedem unterschiedlich ausfallen wird) der POI-Warner beendet wird. Somit kann man zumindest noch einige Zeit mit dem Navigator weiterfahren, bevor man das System neu startet.
Vorher ist die Geschichte komplett abgestürzt und das natürlich immer in Situationen, wo man dringend ein Navi gebraucht hätte.
Vielleicht ist es ja für jemanden interessant, daher hier meine "aufgebohrte" Funktion MemoryCheck (die sich im Script etwas unterhalb der Mitte findet):
# #########################
# Staus des Hauptspeichers
# "FreeMemory()"prüfen.
# #########################
sub MemoryCheck
If (Debug = 1)
WriteFile (DebugDatei,"In Sub-Routine MemoryCheck",1)
EndIf
MemSize = FreeMemory()
If (Debug = 1)
call AktZeit
WriteFile (DebugDatei," - free Memory: " & MemSize & "^NL^",1)
WriteFile ("\SD-Karte\MN6_MemDebug.txt",IstUhrzeit & " - " & MemSize & "^NL^",1)
EndIf
If (MemSize <= MemLevel1 AND FirstWarn = 0)
Repeat (3)
Playsound (TMCLCScripte \ Hinweiswav)
EndRepeat
SleepMessage (10, ("- ACHTUNG: -^NL^Nur noch "& MemSize & " KB^NL^ freier Speicher!"),"[Low Memory-Warnung]",1)
FirstWarn = 1
If (Debug = 1)
WriteFile (DebugDatei,"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!^NL^",1)
WriteFile (DebugDatei,"!!!! [Low Memory-Warnung 1] !!!!^NL^",1)
WriteFile (DebugDatei,"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!^NL^",1)
EndIf
EndIf
If (MemSize <= MemLevel2 AND SecondWarn = 0)
Repeat (5)
Playsound (TMCLCScripte \ Hinweiswav)
EndRepeat
SleepMessage (10, ("- ACHTUNG: -^NL^Nur noch "& MemSize & " KB^NL^ freier Speicher!!!^NL^\
Neustart oder Reset empfohlen!"),"[Low Memory-Warnung]",1)
SecondWarn = 1
# Jetzt ist die Speicherprüfung abgeschaltet
MemoryWarn = 0
If (Debug = 1)
WriteFile (DebugDatei,"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!^NL^",1)
WriteFile (DebugDatei,"!!!! [Low Memory-Warnung 2] !!!!^NL^",1)
WriteFile (DebugDatei,"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!^NL^",1)
EndIf
EndIf
If (MemSize <= 42000 AND PoiWarnerStart = 1)
If (Debug = 1)
call AktZeit
WriteFile (DebugDatei,"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!^NL^",1)
WriteFile (DebugDatei,"!!!! POI-Warner ausschalten !!!!^NL^",1)
WriteFile (DebugDatei,"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!^NL^",1)
WriteFile ("\SD-Karte\MN6_MemDebug.txt",IstUhrzeit & " - POI-Warner ausschalten!^NL^",1)
EndIf
PoiWarnerStart = 0
If (POIWSilentStart = 1)
Sleep (SleepLang)
EndIf
If (WndExists(POIName))
Show (POIName)
sleep (SleepNormal)
# POI-Warner: Überwachung beenden
MouseClick (POIName,PoiClick_x,PoiClick_y)
sleep (SleepNormal)
# POI-Warner beenden
PoiDatei_x = 20
POIDatei_y = 310
PoiEnde_x = 20
POIEnde_y = 285
# Bei VGA-Auflösung POI-W Koordinaten verdoppeln
If (VGA480640 = 1)
PoiDatei_x = PoiDatei_x*2
POIDatei_y = POIDatei_y*2
PoiEnde_x = PoiEnde_x*2
POIEnde_y = POIEnde_y*2
EndIf
MouseClick (PoiDatei_x,POIDatei_y)
sleep (SleepNormal)
MouseClick (PoiEnde_x,POIEnde_y)
sleep (SleepNormal)
while (WndExists (POIName))
Show (POIName)
sleep (SleepNormal)
MouseClick (PoiDatei_x,POIDatei_y)
sleep (SleepNormal)
MouseClick (PoiEnde_x,POIEnde_y)
sleep (SleepNormal)
EndWhile
EndIf
EndIf
EndSub