public static void bgapi_exec(String cmd, String args) { if (bgWorker == null) { bg_watcher = new Timer(30 * 1000); bg_watcher.Elapsed += new ElapsedEventHandler(bg_watcher_Elapsed); bgWorker = new BackgroundWorker(); bgWorker.DoWork += bgWorker_DoWork; bgWorker.RunWorkerCompleted += bgWorker_RunWorkerCompleted; bg_watcher.Start(); } BGArgs newBGArgs = new BGArgs { args = args, cmd = cmd }; lock (pending_bg_queue.SyncRoot) { if (bgWorker.IsBusy || pending_bg_queue.Count > 0) { pending_bg_queue.Enqueue(newBGArgs); } else { bgWorker.RunWorkerAsync(newBGArgs); } } }
static void bg_watcher_Elapsed(object sender, ElapsedEventArgs e) { if (current_exec != null && current_exec == last_exec_check) { MessageBox.Show("Warning freeswitch is most likely deadlocked, something has been pending in the bg queue for > 30 seconds, currently executing: " + current_exec.cmd + " " + current_exec.args); } last_exec_check = current_exec; }
static void bgWorker_DoWork(object sender, DoWorkEventArgs e) { current_exec = (BGArgs)e.Argument; if (BGAPI == null) { BGAPI = new Api(null); } e.Result = BGAPI.Execute(current_exec.cmd, current_exec.args); current_exec = null; }
public static void bgapi_exec(String cmd, String args) { if (bgWorker == null) { bg_watcher = new Timer(30 * 1000); bg_watcher.Elapsed += new ElapsedEventHandler(bg_watcher_Elapsed); bgWorker = new BackgroundWorker(); bgWorker.DoWork += bgWorker_DoWork; bgWorker.RunWorkerCompleted += bgWorker_RunWorkerCompleted; bg_watcher.Start(); } BGArgs newBGArgs = new BGArgs { args = args, cmd = cmd }; lock (pending_bg_queue.SyncRoot) { if (bgWorker.IsBusy || pending_bg_queue.Count > 0) pending_bg_queue.Enqueue(newBGArgs); else bgWorker.RunWorkerAsync(newBGArgs); } }
public bool BackGroundWorkerTask(System.ComponentModel.BackgroundWorker worker, object argument) { BGArgs userState = (BGArgs)argument; OBJ o = new OBJ(File.ReadAllBytes(userState.filename)); List <String> matnames = new List <string>(); foreach (var v in o.Faces) { if (!matnames.Contains(v.Material)) { matnames.Add(v.Material); } } UI.KCLCollisionTypeSelector ty = new UI.KCLCollisionTypeSelector(matnames.ToArray(), userState.filename); ty.loadMK7KCLInformations(); ty.DialogResult = System.Windows.Forms.DialogResult.None; ty.ShowDialog(); while (ty.DialogResult != System.Windows.Forms.DialogResult.OK) { ; } roundVertexPositions(o); Dictionary <string, ushort> Mapping; Dictionary <string, bool> Colli; Mapping = ty.Mapping; Colli = ty.Colli; List <Vector3> Vertex = new List <Vector3>(); List <Vector3> Normals = new List <Vector3>(); List <KCLPlane> planes = new List <KCLPlane>(); List <Triangle> Triangles = new List <Triangle>(); userState.state = 1; userState.currProg = 0; userState.totProg = o.Faces.Count; foreach (var v in o.Faces) { if (Colli[v.Material]) { Triangle t = new Triangle(o.Vertices[v.VertexIndieces[0]], o.Vertices[v.VertexIndieces[1]], o.Vertices[v.VertexIndieces[2]]); Vector3 qq = (t.PointB - t.PointA).Cross(t.PointC - t.PointA); if ((qq.X * qq.X + qq.Y * qq.Y + qq.Z * qq.Z) < 0.1) { continue; } KCLPlane p = new KCLPlane(); p.CollisionType = Mapping[v.Material]; Vector3 a = (t.PointC - t.PointA).Cross(t.Normal); a.Normalize(); a = -a; Vector3 b = (t.PointB - t.PointA).Cross(t.Normal); b.Normalize(); Vector3 c = (t.PointC - t.PointB).Cross(t.Normal); c.Normalize(); p.Length = (t.PointC - t.PointA).Dot(c); int q = ContainsVector3(t.PointA, Vertex); if (q == -1) { p.VertexIndex = (ushort)Vertex.Count; Vertex.Add(t.PointA); } else { p.VertexIndex = (ushort)q; } q = ContainsVector3(t.Normal, Normals); if (q == -1) { p.NormalIndex = (ushort)Normals.Count; Normals.Add(t.Normal); } else { p.NormalIndex = (ushort)q; } q = ContainsVector3(a, Normals); if (q == -1) { p.NormalAIndex = (ushort)Normals.Count; Normals.Add(a); } else { p.NormalAIndex = (ushort)q; } q = ContainsVector3(b, Normals); if (q == -1) { p.NormalBIndex = (ushort)Normals.Count; Normals.Add(b); } else { p.NormalBIndex = (ushort)q; } q = ContainsVector3(c, Normals); if (q == -1) { p.NormalCIndex = (ushort)Normals.Count; Normals.Add(c); } else { p.NormalCIndex = (ushort)q; } planes.Add(p); Triangles.Add(t); } userState.currProg++; worker.ReportProgress(0, userState); if (worker.CancellationPending) { return(false); } } Vertices = Vertex.ToArray(); this.Normals = Normals.ToArray(); Planes = planes.ToArray(); Header = new MK7KCLHeader(); Octree = KCLOctree.FromTriangles(Triangles.ToArray(), Header, 2048, 128, 32, 10, userState, worker); if (Octree == null) { return(false); } return(true); }
static void bg_watcher_Elapsed(object sender, ElapsedEventArgs e) { if (current_exec != null && current_exec == last_exec_check) MessageBox.Show("Warning freeswitch is most likely deadlocked, something has been pending in the bg queue for > 30 seconds, currently executing: " + current_exec.cmd + " " + current_exec.args); last_exec_check = current_exec; }
static void bgWorker_DoWork(object sender, DoWorkEventArgs e) { current_exec = (BGArgs)e.Argument; if (BGAPI == null) BGAPI = new Api(); e.Result = BGAPI.Execute(current_exec.cmd, current_exec.args); current_exec = null; }