StandardIOStream zum beenden eines Programms verwenden?

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

Xaymar

ehemals "Cgamer"

Betreff: StandardIOStream zum beenden eines Programms verwenden?

BeitragDo, Nov 22, 2012 16:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Moin,

Ich versuche derzeit eins meiner Konsolen Programme via StandardIOStream zu schließen. Das Problem hierbei ist, dass das Programm nicht anhalten darf, zumindest nicht zu lange (maximal 10ms).
Soweit wie ich das verstanden habe ist StandardIOStream einfach nur ein TStream Objekt, wodurch ich doch eigentlich mit Size() und ReadByte() auf Buchstaben prüfen könnte. Dachte ich zumindest, denn funktionieren tut es nicht.
Gibt es einen weg der das Programm nicht blockiert (bzw. wie könnte man sonst ein Konsolen Programm beenden)? Nicht blockierendes IO ist der Mittelpunkt des Programms, da dieses extrem viele Netzwerk Pakete annimmt und verarbeitet.

Derzeitiger Code:
BlitzMax: [AUSKLAPPEN]
	If StandardIOStream.Size() <> 0 Then
For Local oClient:TClient = EachIn oClientList
oClient.Kill()
Next
oClientList.Clear()
oServerSocket.Close()
End
EndIf
Warbseite

mpmxyz

BeitragSa, Nov 24, 2012 13:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Wäre es nicht möglich, diese Aufgabe in einem parallelen Thread auszuführen?
Der darf ja dann ruhig blockiert werden.
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer

count-doku

BeitragSa, Nov 24, 2012 18:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Jup mpmxyz, das geht ohne Probleme.
Hatte selbiges Problem wie du Xaymar und habe es einfach durch nen zusätzlichen Thread gelöst.

Der "Konsolen"Thread wartet einfach aufn Input und beendet sich im Falle dieses.
Der Hauptthread prüft regelmäßig (ThreadRunning) ob der "Konsolen"Thread noch läuft, wenn nicht-> HT wird auch beendet.

Klenes Beispiel:
BlitzMax: [AUSKLAPPEN]

Local threadConsole:TThread = CreateThread(UpdateConsole, tar)
Print "* Running..."
Repeat

Delay 16
Until (ThreadRunning(threadConsole) = False)
Print "* Stopped"


Function UpdateConsole:Object(data:Object)
Repeat
Until Input("- Stop> ") = "y"
Return Null
End Function


mfg,
Count-Doku

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group