bmk_pm_ng.bmx 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. SuperStrict
  2. Import BRL.ThreadPool
  3. Import "bmk_ng_utils.bmx"
  4. Type TProcessManager
  5. Field pool:TThreadPoolExecutor
  6. Field cpuCount:Int
  7. Field threads:TList = New TList
  8. Method New()
  9. cpuCount = GetCoreCount()
  10. pool = TThreadPoolExecutor.newFixedThreadPool(Max(1, cpuCount - 1))
  11. End Method
  12. Method CheckTasks()
  13. While pool.getActiveCount() = pool.maxThreads
  14. Delay 5
  15. Wend
  16. End Method
  17. Method WaitForTasks()
  18. While pool.getActiveCount() Or Not pool.IsQueueEmpty()
  19. Delay 5
  20. Wend
  21. End Method
  22. Method DoSystem(cmd:String, src:String, obj:String, supp:String)
  23. CheckTasks()
  24. pool.execute(new TThreadPoolTask.Create(TProcessTask._DoTasks, CreateProcessTask(cmd, src, obj, supp)))
  25. End Method
  26. Method AddTask:Int(func:Object(data:Object), data:Object)
  27. CheckTasks()
  28. pool.execute(new TThreadPoolTask.Create(func, data))
  29. End Method
  30. End Type
  31. Type TThreadPoolTask Extends TRunnable
  32. Field func:Object(data:Object)
  33. Field data:Object
  34. Method Create:TThreadPoolTask(func:Object(data:Object), data:Object)
  35. Self.func = func
  36. Self.data = data
  37. Return self
  38. End Method
  39. Method run()
  40. func(data)
  41. End Method
  42. End Type