34 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
		
		
			
		
	
	
			34 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
|  | package eval.luv; | ||
|  | 
 | ||
|  | /** | ||
|  | 	Threads. | ||
|  | 
 | ||
|  | 	@see https://aantron.github.io/luv/luv/Luv/Thread | ||
|  | 
 | ||
|  | 	`eval.luv` integrates libuv with the OCaml runtime lock. This means that, as | ||
|  | 	in any other OCaml program, two threads cannot be running OCaml code at the | ||
|  | 	same time. Thus, two threads cannot be running Haxe code at the same time | ||
|  | 	because eval interpreter is written in OCaml. | ||
|  | 	However, `eval.luv` releases the lock when calling a potentially-blocking libuv API, | ||
|  | 	so that other threads can run while the calling thread is blocked. In particular, | ||
|  | 	the lock is released during calls to `eval.luv.Loop.run`, which means that other | ||
|  | 	threads can run in between when you make a call to a non-blocking API, and when | ||
|  | 	its callback is called by libuv. | ||
|  | **/ | ||
|  | @:coreType abstract Thread { | ||
|  | 	/** | ||
|  | 		Returns the representation of the calling thread. | ||
|  | 	**/ | ||
|  | 	static public function self():Thread; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 		Starts a new thread, which will run the given function. | ||
|  | 	**/ | ||
|  | 	static public function create(fn:()->Void, ?stackSize:Int):Result<Thread>; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 		Waits for the thread to terminate. | ||
|  | 	**/ | ||
|  | 	public function join():Result<Result.NoData>; | ||
|  | 
 | ||
|  | } |