Sfoglia il codice sorgente

implement sendMessage/readMessage using Deque

ncannasse 1 settimana fa
parent
commit
38f75f55b5
1 ha cambiato i file con 20 aggiunte e 0 eliminazioni
  1. 20 0
      std/sys/thread/Thread.hx

+ 20 - 0
std/sys/thread/Thread.hx

@@ -33,6 +33,7 @@ class Thread {
 	static var mainThread : Thread;
 
 	var impl : ThreadImpl;
+	var messages : Deque<Dynamic>;
 
 	/**
 		Event loop of this thread.
@@ -59,6 +60,25 @@ class Thread {
 		if( impl != null ) ThreadImpl.setName(impl,name == null ? "" : name);
 		return n;
 	}
+	
+	public function sendMessage( msg : Dynamic ) {
+		if( messages == null ) {
+			mutex.acquire();
+			if( messages == null ) messages = new Deque();
+			mutex.release();
+		}
+		messages.add(msg);
+	}
+
+	public static function readMessage( blocking : Bool ) : Null<Dynamic> {
+		var t = current();
+		if( t.messages == null ) {
+			mutex.acquire();
+			if( t.messages == null ) t.messages = new Deque();
+			mutex.release();
+		}
+		return t.messages.pop(blocking);
+	}
 
 	/**
 		Returns the current thread.