PS: Ich habe das jetzt im meiner Anwendung mal geändert. Funktioniert im Prinzip.
Nachteile im Moment:
Ich muss jetzt am Anfang des Programms schon festlegen wie groß mein Screen werden soll. später kann ich weder eine Resize machen noch einen neuen Screen mit anderer Grösse erzeugen, da das ja anscheinend -ohne Absturz nicht geht.
Das schränkt ein....
Programmabsturz / Crash bei OpenWindowedScreen in procedure
Re: Programmabsturz / Crash bei OpenWindowedScreen in proced
Was hast du genau vor?
Soll das ein Spiel werden?
Optionscreen, wo man alles mögliche einstellen kann und dann das Spiel starten kann, so dass erst dann der Grafikscreen öffnet?
Teile es doch auf zwei Binaries auf, so dass quasi zwei unabhängige Prozesse entstehen.
Die erste ist der Optionscreen, die dann die zweite mit entsprechenden Parametern startet. Hätte auch Vorteile, dass du dich nicht bei jedem Testlauf auf's neue durch die Optionen klicken musst .
Soll das ein Spiel werden?
Optionscreen, wo man alles mögliche einstellen kann und dann das Spiel starten kann, so dass erst dann der Grafikscreen öffnet?
Teile es doch auf zwei Binaries auf, so dass quasi zwei unabhängige Prozesse entstehen.
Die erste ist der Optionscreen, die dann die zweite mit entsprechenden Parametern startet. Hätte auch Vorteile, dass du dich nicht bei jedem Testlauf auf's neue durch die Optionen klicken musst .
Re: Programmabsturz / Crash bei OpenWindowedScreen in proced
Nein, kein Spiel.
Ich habe eine Anwendung die Kurvenverläufe berechnet und dann als Kurvengrafik anzeigt.
Zusätzlich -über Button- biete ich dann noch an aus der Kurve, durch Drehung, eine 3D Figur anzuzeigen damit mein eine räumliche Vorstellung bekommt...
Man kann sich das dann schön hin- und herdrehen und von vorn und hinten anschauen … so die Idee.
Ich habe eine Anwendung die Kurvenverläufe berechnet und dann als Kurvengrafik anzeigt.
Zusätzlich -über Button- biete ich dann noch an aus der Kurve, durch Drehung, eine 3D Figur anzuzeigen damit mein eine räumliche Vorstellung bekommt...
Man kann sich das dann schön hin- und herdrehen und von vorn und hinten anschauen … so die Idee.
Re: Programmabsturz / Crash bei OpenWindowedScreen in proced
Achso.
Ist prinzipiell nicht anderes als ein Spiel mit vorgeschaltetem Launcher.
Könntest daher trotzdem auf zwei ausführbare Dateien (einmal "Launcher" mit der ganzen Mathematik usw und einmal die 3D-Ausgabe) aufteilen, um das Problem zu umschiffen.
Kannst diese zwei natürlich wieder vereinen.
Dann wird die Engine als zweiter Prozess gestartet.
Wie du die Ausgabedaten rüberbekommst... suche dir was aus:
- Daten als Parameter mitgeben, wenn es nicht zu viele sind
- Temporäre Datei und Pfad zu dieser als Übergabeparameter (diese Variante habe ich für das nachfolgende Beispiel genommen)
- Direkte Kommunikation über stdin/stdout (Ich weiß nicht 100%ig, ob Windows da mitspielt, da dieses AFAIK zwischen Konsolen- und Nicht-Konsolen-Anwendung unterscheidet)
- Network-Library (Echtzeitkommunikation, bei der Server und Client auf demselben Host laufen, also nicht wirklich Netzwerk). Musst dir halt eine Schnittstelle bauen. Mit PB relativ einfach.
Beispiel (primitiv, ohne Fehlerhandling):
Ist prinzipiell nicht anderes als ein Spiel mit vorgeschaltetem Launcher.
Könntest daher trotzdem auf zwei ausführbare Dateien (einmal "Launcher" mit der ganzen Mathematik usw und einmal die 3D-Ausgabe) aufteilen, um das Problem zu umschiffen.
Kannst diese zwei natürlich wieder vereinen.
Dann wird die Engine als zweiter Prozess gestartet.
Wie du die Ausgabedaten rüberbekommst... suche dir was aus:
- Daten als Parameter mitgeben, wenn es nicht zu viele sind
- Temporäre Datei und Pfad zu dieser als Übergabeparameter (diese Variante habe ich für das nachfolgende Beispiel genommen)
- Direkte Kommunikation über stdin/stdout (Ich weiß nicht 100%ig, ob Windows da mitspielt, da dieses AFAIK zwischen Konsolen- und Nicht-Konsolen-Anwendung unterscheidet)
- Network-Library (Echtzeitkommunikation, bei der Server und Client auf demselben Host laufen, also nicht wirklich Netzwerk). Musst dir halt eine Schnittstelle bauen. Mit PB relativ einfach.
Beispiel (primitiv, ohne Fehlerhandling):
Code: Alles auswählen
Procedure Run3DView()
;In echt kommt hier das Ogre-Gedöns rein
tmpFile$ = ProgramParameter()
If tmpFile$
file = ReadFile(#PB_Any,tmpfile$)
If file
text$ = ReadString(file)
CloseFile(file)
If text$ ;obacht! Die Daten vor Verwendung auf Korrektheit prüfen. Sonst evtl. Sicherheitslücke!
MessageRequester("Bla","Die Texteingabe ist: "+text$,0)
EndIf
EndIf
EndIf
EndProcedure
Procedure runLauncher()
mainWin = OpenWindow(#PB_Any,#PB_Ignore,#PB_Ignore,512,384,"Launcher",#PB_Window_ScreenCentered)
textbox = StringGadget(#PB_Any,8,8,256,20,"")
button = ButtonGadget(#PB_Any,256+8,8,20,20,"Fire!")
Repeat
event = WaitWindowEvent()
If event = #PB_Event_Gadget
If EventGadget() = button
text$ = GetGadgetText(textbox)
If text$
tmpPath$ = GetTemporaryDirectory()
If tmpPath$
tmpFile$ = tmpPath$ + "purebasic_ogre_bla.dat" ;Vorsicht! Nicht mit den Tempdateien anderer Programmen kollidieren! In Echt einen eigenen Unterordner verwenden und noch einen Hashwert mit rein (damit mehrere Instanzen möglich sind)!
file = OpenFile(#PB_Any,tmpFile$)
WriteString(file,text$)
CloseFile(file)
;Datei wieder löschen nicht vergessen! (mache ich jetzt nicht^^. Der zweite Prozess muss irgendwie an den ersten zurückmelden, dass er die Datei ausgelesen hat und dann weg damit. Oder dem zweiten Prozess die Löschung überlassen)
If file
RunProgram(ProgramFilename(), "-view " + tmpFile$,GetCurrentDirectory()) ;Die 3D-Ausgabe starten
EndIf
EndIf
EndIf
EndIf
EndIf
Until event = #PB_Event_CloseWindow
EndProcedure
If ProgramParameter() = "-view"
Run3DView()
Else
RunLauncher()
EndIf
End
Re: Programmabsturz / Crash bei OpenWindowedScreen in proced
… oder man müsste mal probieren was passiert wenn man den 3D Kram in einen eignen Thread auslagert... in der Hoffnung das das Programm dann nicht abstürzt wenn man den Thread mehrmals nacheinander startet.. mal sehen.
Das mit der Datenübergabe muss dann natürlich auch bedacht werden.
Danke für die Tipps...
Das mit der Datenübergabe muss dann natürlich auch bedacht werden.
Danke für die Tipps...
Re: Programmabsturz / Crash bei OpenWindowedScreen in proced
Das wäre fatal falsch!der man müsste mal probieren was passiert wenn man den 3D Kram in einen eignen Thread auslagert... in der Hoffnung das das Programm dann nicht abstürzt wenn man den Thread mehrmals nacheinander startet.. mal sehen.
Das stürzt dann mit eigentlich 100% Sicherheit ab.
Betriebssysteme: div. Windows, Linux, Unix - Systeme
no Keyboard, press any key
no mouse, you need a cat
no Keyboard, press any key
no mouse, you need a cat