2016-12-05 12 views
1

最近私はHaxe Processクラスの使用を開始しました。私はそれを使ってcurlコマンドを呼び出しています。プロセスが完了するまでプロセスはブロックされます。何かのようにHaxeで一度に複数のプロセスを実行する最良の方法は何ですか?

for(obj in array) { 
var curl = 'curl "http://something.com?param=$obj"'; 
var process = new Process(curl); 
trace('finished); 
process.close(); 

} 

私がしたいのは、一度に4つまたは5つのプロセスを実行することです。私が基本的に100個のアイテムを持っているforループを作成して、一度に4つのプロセスを実行できるのであれば、配列の最後に到達するまではすばらしいでしょう。

答えて

1

私はスレッドを調べる必要があると思います。https://gist.github.com/underscorediscovery/e66e72ec702bdcedf5af45f8f4712109

:私はあなたが

#if cpp 
    import cpp.vm.Thread; 
    import cpp.vm.Deque; 
#elseif neko 
    import neko.vm.Thread; 
    import neko.vm.Deque; 
#end 

/** 
A simple Haxe class for easily running threads and calling functions on the primary thread. 
from https://github.com/underscorediscovery/ 
*/ 
class Runner { 

    public static var primary : Thread; 

    static var queue : Deque<Void->Void>; 

     /** Call this on your thread to make primary, 
      the calling thread will be used for callbacks. */ 
    public static function init() { 
     queue = new Deque<Void->Void>(); 
     primary = Thread.current(); 
    } 

     /** Call this on the primary manually, 
      Returns the number of callbacks called. */ 
    public static function run() : Int { 

     var more = true; 
     var count = 0; 

     while(more) { 
      var item = queue.pop(false); 
      if(item != null) { 
       count++; item(); item = null; 
      } else { 
       more = false; break; 
      } 
     } 

     return count; 

    } //process 

     /** Call a function on the primary thread without waiting or blocking. 
      If you want return values see call_primary_ret */ 
    public static function call_primary(_fn:Void->Void) { 

     queue.push(_fn); 

    } //call_primary 

     /** Call a function on the primary thread and wait for the return value. 
      This will block the calling thread for a maximum of _timeout, default to 0.1s. 
      To call without a return or blocking, use call_primary */ 
    public static function call_primary_ret<T>(_fn:Void->T, _timeout:Float=0.1) : Null<T> { 

     var res:T = null; 
     var start = haxe.Timer.stamp(); 
     var lock = new cpp.vm.Lock(); 

      //add to main to call this 
     queue.push(function() { 
      res = _fn(); 
      lock.release(); 
     }); 

      //wait for the lock release or timeout 
     lock.wait(_timeout); 

      //clean up 
     lock = null; 
      //return result 
     return res; 

    } //call_primary_ret 

     /** Create a thread using the given function */ 
    public static function thread(fn:Void->Void) : Thread { 
     return Thread.create(fn); 
    } 

} //Runner 

ソースhaXeの/ Javaでこれに近づく方法がわからを助けることがない可能性があります。この例を見つけました

関連する問題