Laden...

Anwendung friert ein oder stürzt ab...

Erstellt von ViperNeo vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.997 Views
V
ViperNeo Themenstarter:in
352 Beiträge seit 2008
vor 13 Jahren
Anwendung friert ein oder stürzt ab...

Hallo Leute,

ich bin zurzeit am verzweifeln mit einem Kundenprojekt...

Für den Kunden habe ich vor längerer Zeit eine Multimediaterminal Anwendung entwickelt. Diese ist Netzwerkfähig und läuft soweit auch sehr stabil.

Nun kam zu Anfang des Jahres eine Erweiterung mit ins Programm. Und zwar wurde von einem Flash-Entwickler ein (900MB) großes Flash Spiel entworfen, indem Animationen, Videos und Sprachelemente eine große Rolle spielen.

Da die Terminalanwendung sogut wie alles abspielen kann, war mein erster Ansatz das ganze über eine HTML Seite und dem WebBrowser-Control darzustellen.
Dies erwies sich jedoch als großer Fehler, da das Flash einfach zu groß für den IE war und die Anwendung tierisch geruckelt hat.

Also bat ich den Entwickler mir eine FlashApplikation (.exe) zu schicken, da das aus Flash heraus funktioniert und mithilfe des FlashPlayers kompiliert wird und somit eine ausführbare Anwendung.

Diese Flash.exe läuft nun auch einwandfrei. Problem hier ist nun jedoch, dass ich mitbekommen muss, ob das Flash-Spiel läuft oder nicht. Daher habe ich mich dazu entschlossen in der Terminalanwendung einen Prozess zu starten und auf Beendigung dessen zu warten. Bei meinen Testläufen lief das auch ohne Probleme.

Nun bekomme ich vom Kunden jedoch regelmäßig Nachrichten, dass die komplette Applikation inklusive Rechner abstürzt. Nach Kontrolle der Systemeinstellungen im Windows habe ich feststellen können, dass meine Terminalanwendung oft mit einem "Keine Rückmeldung"-Error abstürzt und danch irgendwie einen StopError im Windows auslöst und somit entweder das System abstürzt oder die Benutzer aufdie Desktop-Oberfläche gelangen.

Für mich ist es langsam ein großes Rätsel, da ich bereits Speicher und PageFile in den Terminals angepasst habe, um mehr Speicherpower rauszuholen, da ich anfangs dachte das Flash Teil verstopft alles. Das hat jedoch rein gar nichts gebracht.

Habt ihr eine Idee was man noch optimieren könnte?

Danke schonmal!

Beste Grüße,
ViperNeo

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo ViperNeo,

... dass meine Terminalanwendung oft mit einem "Keine Rückmeldung"-Error abstürzt ...

siehe [FAQ] Warum blockiert mein GUI?

herbivore

V
ViperNeo Themenstarter:in
352 Beiträge seit 2008
vor 13 Jahren

hm also meinst du die auslagerung in einen neuen thread wäre hier eine sinnvolle möglichkeit?

dann verliere ich doch aber wieder die kontrolle über den neuen prozess... oder steh ich grad auf dem schlauch?

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo ViperNeo,

hm also meinst du die auslagerung in einen neuen thread wäre hier eine sinnvolle möglichkeit?

ich meine, dass das GUI blockiert, wenn im GUI-Thread langlaufende Aktionen durchgeführt werden und dass man diese dann in einen neuen Thread auslagern muss.

Und irgendwas scheint ja deinen GUI-Thread zu blockieren.

Das Starten eines Prozesses ist dagegen normalerweise nicht langlaufend. Prozess.Start kehrt sofort zurück, sobald der Prozess gestartet ist.

dann verliere ich doch aber wieder die kontrolle über den neuen prozess

Warum sollte von dem Thread, in dem du den Prozess startest, die Kontrolle über den Prozess abhängen?

herbivore

PS: Was das Abstürzen angeht, solltest du sicherstellen, dass du alle Exceptions fängst und ausgibst oder zumindest loggst.

F
60 Beiträge seit 2010
vor 13 Jahren

zeig doch mal die schleife, in der du überprüfst, ob der prozess schon läuft.

Gelöschter Account
vor 13 Jahren

@fielding:

dafür braucht man keine schleife... es reicht wenn man .WaitForExit aufruft aber der blokiert ja auch 😉

V
ViperNeo Themenstarter:in
352 Beiträge seit 2008
vor 13 Jahren

Wie Jack sagt nutze ich WaitForExit() an der Stelle. Dadurch wartet meine Anwendung auf Beedingung des anderen Prozesses und ist somit eingefroren... Das ist grundsätzlich acuh nicht mein Problem. Sie kann und soll ruhig eingefroren und nicht nutzbar sein. Probleme gibt es nun eben wenn der Prozess des Spiels nicht korrekt beendet wurde.

vielleicht wäre es jedoch eine lösung, meine temrinal applikation in einen art ruhemodus zu schalten und in einem neuen thread den prozess zu überwachen. sobald der prozess geschlossen ist die applikation zurückholen. dann blockiert nichts. jedoch kann es dann natürlich vorkommen das bei nicht korrekter beendigung des anderen prozesses meine anwendung nicht mehr aus dem ruhemodus kommt.

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo ViperNeo,

WaitForExit gehört nunmal nicht in den GUI-Thread. Behebe das erstmal und schau, ob der Fehler danach überhaupt noch auftritt.

herbivore

Gelöschter Account
vor 13 Jahren

jedoch kann es dann natürlich vorkommen das bei nicht korrekter beendigung des anderen prozesses meine anwendung nicht mehr aus dem ruhemodus kommt.

nein kann nciht sein. wenn der andere prozess aus welchem grund auch immer terminiert wird, gehts bei waitforexit weiter...

F
60 Beiträge seit 2010
vor 13 Jahren

@fielding:

dafür braucht man keine schleife... es reicht wenn man .WaitForExit aufruft aber der blokiert ja auch 😉

das war auch kein tipp sondern zartes nachfragen nach sowas:

while(true){/* solange process läuf mülle den speicher zu und sleep ist was für anfänger */}
5.299 Beiträge seit 2008
vor 13 Jahren

mir scheint, man braucht auch kein waitforexit, um das ende mitzukriegen. guck dirmal die events von process an.

Der frühe Apfel fängt den Wurm.

Gelöschter Account
vor 13 Jahren

wenn du das über das exited event machst bedenke, das du unbedingt das propertie EnableRaisingEvents auf true stellen musst, sonst bekommst du es doch nciht mit wenn der prozess sich beendet 😉