aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMiguel Costa <miguel.costa@qt.io>2021-05-27 09:31:27 +0200
committerMiguel Costa <miguel.costa@qt.io>2021-06-02 09:03:42 +0000
commitc28f872fbeb06b35010d859cbc0dbaa46b147fde (patch)
tree0f529ee23471d81b35b657222092130678c1b057 /src
parentc27c8f52f5b20407994fedf606e170765c3b6454 (diff)
Add ConcurrentStopwatch class
Added a thread-safe version of the Stopwatch .NET class. Change-Id: Ia167e38ed126ef11625fab0fe8df7fd6308e08a0 Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/qtvstools/Common/ConcurrentStopwatch.cs61
-rw-r--r--src/qtvstools/QtVsTools.csproj1
2 files changed, 62 insertions, 0 deletions
diff --git a/src/qtvstools/Common/ConcurrentStopwatch.cs b/src/qtvstools/Common/ConcurrentStopwatch.cs
new file mode 100644
index 00000000..fa444cc9
--- /dev/null
+++ b/src/qtvstools/Common/ConcurrentStopwatch.cs
@@ -0,0 +1,61 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the Qt VS Tools.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+using System;
+using System.Diagnostics;
+
+namespace QtVsTools
+{
+ public class ConcurrentStopwatch : Concurrent<ConcurrentStopwatch>
+ {
+ Stopwatch Stopwatch { get; set; }
+
+ public ConcurrentStopwatch()
+ {
+ Stopwatch = new Stopwatch();
+ }
+
+ public static ConcurrentStopwatch StartNew()
+ {
+ ConcurrentStopwatch s = new ConcurrentStopwatch();
+ s.Start();
+ return s;
+ }
+
+ public static long Frequency => Stopwatch.Frequency;
+ public static bool IsHighResolution => Stopwatch.IsHighResolution;
+ public bool IsRunning => ThreadSafe(() => Stopwatch.IsRunning);
+ public TimeSpan Elapsed => ThreadSafe(() => Stopwatch.Elapsed);
+ public long ElapsedMilliseconds => ThreadSafe(() => Stopwatch.ElapsedMilliseconds);
+ public long ElapsedTicks => ThreadSafe(() => Stopwatch.ElapsedTicks);
+ public void Reset() => ThreadSafe(() => Stopwatch.Reset());
+ public void Restart() => ThreadSafe(() => Stopwatch.Restart());
+ public void Start() => ThreadSafe(() => Stopwatch.Start());
+ public void Stop() => ThreadSafe(() => Stopwatch.Stop());
+ }
+}
diff --git a/src/qtvstools/QtVsTools.csproj b/src/qtvstools/QtVsTools.csproj
index 61ee5a2f..5a68fc43 100644
--- a/src/qtvstools/QtVsTools.csproj
+++ b/src/qtvstools/QtVsTools.csproj
@@ -59,6 +59,7 @@
</Compile>
<Compile Include="ChangeFor.cs" />
<Compile Include="Common\Concurrent.cs" />
+ <Compile Include="Common\ConcurrentStopwatch.cs" />
<Compile Include="Common\Disposable.cs" />
<Compile Include="Common\NativeAPI.cs" />
<Compile Include="Common\Prototyped.cs" />