improved Processhandle

This commit is contained in:
Djeeberjr 2023-06-07 20:09:34 +02:00
parent 9a9041bd98
commit 7aa5698486

View File

@ -21,6 +21,8 @@ class ProcessHandle {
private var closeFutureResolev: Bool -> Void; private var closeFutureResolev: Bool -> Void;
private final windowContexts: Array<WindowContext> = []; private final windowContexts: Array<WindowContext> = [];
private final cbLinks:Array<CallbackLink> = []; private final cbLinks:Array<CallbackLink> = [];
private final deferFuncs:Array<Void -> Void> = [];
private var hasExited: Bool = false;
@:allow(kernel.ps.ProcessManager) @:allow(kernel.ps.ProcessManager)
private function new(config: HandleConfig,pid: PID) { private function new(config: HandleConfig,pid: PID) {
@ -42,12 +44,15 @@ class ProcessHandle {
} }
public function close(success: Bool = true): Void { public function close(success: Bool = true): Void {
this.hasExited = true;
this.dispose(); this.dispose();
this.closeFutureResolev(success);
EndOfLoop.endOfLoop(() ->{this.closeFutureResolev(success);});
ProcessManager.removeProcess(this.pid); ProcessManager.removeProcess(this.pid);
} }
public function write(message: String): Void { public function write(message: String): Void {
if (this.hasExited) return;
if (this.config.onWrite != null){ if (this.config.onWrite != null){
this.config.onWrite.invoke(message); this.config.onWrite.invoke(message);
} }
@ -77,6 +82,10 @@ class ProcessHandle {
for (link in this.cbLinks) { for (link in this.cbLinks) {
link.cancel(); link.cancel();
} }
for (func in this.deferFuncs) {
func();
}
} }
public function getPid(): PID { public function getPid(): PID {
@ -87,6 +96,10 @@ class ProcessHandle {
this.cbLinks.push(link); this.cbLinks.push(link);
} }
public function addDeferFunc(func: Void -> Void) {
this.deferFuncs.push(func);
}
function get_args():ReadOnlyArray<String> { function get_args():ReadOnlyArray<String> {
return this.config.args; return this.config.args;
} }