private void btnFilterFiles_Click(object sender, EventArgs e) { Control[] controls = Controls.Find("FilterFiles", true); if (controls.Length < 1) { FilterFiles filterFiles = new FilterFiles(m_Model, presenter); ShiftUserControlDisplay(filterFiles); } }
private void ProcessFilterFiles(object options) { if (FilterFiles.Count == 0) { return; } var socket = CanvasManager.ServerSocket.GetSocket(ServerSocketType.Count); CountList = new List <long[]>(); var op = (CountProcessOptions)options; var curr = op.Start; var end = op.End; var indices = new List <long>(); indices.Add(CanvasManager.FileManager.TimeFile.GetPacketIndex(curr)); while (curr < end) { curr = Increment(curr, op.RenderUnit); if (curr > end) { curr = end; } indices.Add(CanvasManager.FileManager.TimeFile.GetPacketIndex(curr)); } var rawList = FilterFiles.Select(filterFile => filterFile.FillBitResultsList(indices)).ToList(); var segments = rawList[0].Count; var max = rawList.SelectMany(r => r).Select(x => x.Length).Max(); //indicate gpu to use socket.Send(BitConverter.GetBytes(CanvasManager.SelectedGpuIndex), sizeof(int)); //indicate number of segments so server can allocate result memory socket.Send(BitConverter.GetBytes(FilterFiles.Count * segments), sizeof(int)); //indicate max size of segments socket.Send(BitConverter.GetBytes(max), sizeof(int)); for (int k = 0; k < segments; k++) { for (int j = 0; j < FilterFiles.Count; j++) { var msg = rawList[j][k]; socket.Send(msg, msg.Length); } } var reply = socket.Receive(); var size = FilterFiles.Count * sizeof(long); for (var k = 0; k < segments; k++) { var counts = new long[FilterFiles.Count]; Buffer.BlockCopy(reply, k * size, counts, 0, size); CountList.Add(counts); } CanvasManager.ServerSocket.ReturnSocket(ref socket); }