private void UpdateChart() { var speeds = ThreadWrapper.GetSpeeds(); var uniqueValues = m_sampleHistogrammDataFactory.GetSortedUniques(speeds); lblUniqueValuesValue.Text = uniqueValues.Length.ToString(); var resultedValues = m_sampleHistogrammDataFactory.GetHistagrammValues(uniqueValues); this.chart1.ChartAreas.SuspendUpdates(); var series = chart1.Series[0]; double lastXValue = 0.0; double lastYValue = 0.0; int i = 0; for (; i < ChartSize; i++) { SampleHistogrammDataFactory.UniqueValue resultedValue = resultedValues[i]; var seriesPoint = series.Points[i]; seriesPoint.YValues[0] = resultedValue.Count; seriesPoint.XValue = resultedValue.Value; } this.chart1.ChartAreas[0].RecalculateAxesScale(); this.chart1.ChartAreas.ResumeUpdates(); }
protected void ThreadFunc() { m_stopped = false; State = ThreadState.Started; SetAfinnityMask(); Thread.BeginCriticalRegion(); int lastError; do { NativeMethods.SetThreadPriority(m_threadHandle, m_priority); lastError = Marshal.GetLastWin32Error(); if (lastError != 0) { LastErrorMessage = new Win32Exception(lastError).Message; } else { LastErrorMessage = string.Empty; } m_looper = true; Thread.MemoryBarrier(); m_restartLoop = false; switch (m_loadType) { case LoadType.YieldExecution: while (m_looper) { NativeMethods.SwitchToThread(); ++m_looped; Thread.MemoryBarrier(); } break; case LoadType.Sleep: while (m_looper) { Thread.Sleep(0); ++m_looped; Thread.MemoryBarrier(); } break; case LoadType.EmptyLoop: while (m_looper) { ++m_looped; Thread.MemoryBarrier(); } break; case LoadType.PrepareSampleHistogramm50k: { SampleHistogrammDataFactory dataFactory = new SampleHistogrammDataFactory(500); while (m_looper) { ++m_looped; Thread.MemoryBarrier(); var sortedUniques = dataFactory.GetSortedUniques(TestData.TestDoubles50k); var histagrammValues = dataFactory.GetHistagrammValues(sortedUniques); GC.KeepAlive(histagrammValues); } } break; case LoadType.SpinWait: // while (m_looper.Value) PAUSE //not implemented Interlocked.Increment(ref m_looped); unsafe { fixed(void *v = &m_looper) { s_pause(0, (byte *)v); } } break; case LoadType.MemoryPressure: while (m_looper) { MemoryPressureFunction(); { ++m_looped; Thread.MemoryBarrier(); } } break; default: throw new ArgumentOutOfRangeException(); } } while (m_restartLoop); State = ThreadState.Stopped; Thread.EndCriticalRegion(); NativeMethods.CloseHandle(m_threadHandle); lastError = Marshal.GetLastWin32Error(); if (lastError != 0) { LastErrorMessage = new Win32Exception(lastError).Message; } else { LastErrorMessage = string.Empty; } Reinit(); }