diff --git a/BREAKING-CHANGES.txt b/BREAKING-CHANGES.txt
index 805b2e387e..25b850d2cc 100644
--- a/BREAKING-CHANGES.txt
+++ b/BREAKING-CHANGES.txt
@@ -4,6 +4,25 @@ JUCE breaking changes
develop
=======
+Change
+------
+Thread::wait and WaitableEvent::wait now take a double rather than an int to
+indicate the number of milliseconds to wait.
+
+Possible Issues
+---------------
+Calls to either wait function may trigger warnings.
+
+Workaround
+----------
+Explicitly cast the value to double.
+
+Rationale
+---------
+Changing to double allows sub-millisecond waits which was important for
+supporting changes to the HighResolutionTimer.
+
+
Change
------
RealtimeOptions member workDurationMs was replaced by three optional member
diff --git a/examples/DemoRunner/Builds/Android/app/CMakeLists.txt b/examples/DemoRunner/Builds/Android/app/CMakeLists.txt
index 4b246e0a76..4185fcd83d 100644
--- a/examples/DemoRunner/Builds/Android/app/CMakeLists.txt
+++ b/examples/DemoRunner/Builds/Android/app/CMakeLists.txt
@@ -1059,12 +1059,10 @@ add_library( ${BINARY_NAME}
"../../../../../modules/juce_core/native/juce_CFHelpers_mac.h"
"../../../../../modules/juce_core/native/juce_CommonFile_linux.cpp"
"../../../../../modules/juce_core/native/juce_ComSmartPtr_windows.h"
- "../../../../../modules/juce_core/native/juce_FileDescriptor_linux.cpp"
"../../../../../modules/juce_core/native/juce_Files_android.cpp"
"../../../../../modules/juce_core/native/juce_Files_linux.cpp"
"../../../../../modules/juce_core/native/juce_Files_mac.mm"
"../../../../../modules/juce_core/native/juce_Files_windows.cpp"
- "../../../../../modules/juce_core/native/juce_HighResolutionTimerThread.h"
"../../../../../modules/juce_core/native/juce_IPAddress_posix.h"
"../../../../../modules/juce_core/native/juce_JNIHelpers_android.cpp"
"../../../../../modules/juce_core/native/juce_JNIHelpers_android.h"
@@ -1077,8 +1075,6 @@ add_library( ${BINARY_NAME}
"../../../../../modules/juce_core/native/juce_Network_windows.cpp"
"../../../../../modules/juce_core/native/juce_ObjCHelpers_mac.h"
"../../../../../modules/juce_core/native/juce_PlatformTimer_generic.cpp"
- "../../../../../modules/juce_core/native/juce_PlatformTimer_linux.cpp"
- "../../../../../modules/juce_core/native/juce_PlatformTimer_mac.mm"
"../../../../../modules/juce_core/native/juce_PlatformTimer_windows.cpp"
"../../../../../modules/juce_core/native/juce_PlatformTimerListener.h"
"../../../../../modules/juce_core/native/juce_Registry_windows.cpp"
@@ -3120,12 +3116,10 @@ set_source_files_properties(
"../../../../../modules/juce_core/native/juce_CFHelpers_mac.h"
"../../../../../modules/juce_core/native/juce_CommonFile_linux.cpp"
"../../../../../modules/juce_core/native/juce_ComSmartPtr_windows.h"
- "../../../../../modules/juce_core/native/juce_FileDescriptor_linux.cpp"
"../../../../../modules/juce_core/native/juce_Files_android.cpp"
"../../../../../modules/juce_core/native/juce_Files_linux.cpp"
"../../../../../modules/juce_core/native/juce_Files_mac.mm"
"../../../../../modules/juce_core/native/juce_Files_windows.cpp"
- "../../../../../modules/juce_core/native/juce_HighResolutionTimerThread.h"
"../../../../../modules/juce_core/native/juce_IPAddress_posix.h"
"../../../../../modules/juce_core/native/juce_JNIHelpers_android.cpp"
"../../../../../modules/juce_core/native/juce_JNIHelpers_android.h"
@@ -3138,8 +3132,6 @@ set_source_files_properties(
"../../../../../modules/juce_core/native/juce_Network_windows.cpp"
"../../../../../modules/juce_core/native/juce_ObjCHelpers_mac.h"
"../../../../../modules/juce_core/native/juce_PlatformTimer_generic.cpp"
- "../../../../../modules/juce_core/native/juce_PlatformTimer_linux.cpp"
- "../../../../../modules/juce_core/native/juce_PlatformTimer_mac.mm"
"../../../../../modules/juce_core/native/juce_PlatformTimer_windows.cpp"
"../../../../../modules/juce_core/native/juce_PlatformTimerListener.h"
"../../../../../modules/juce_core/native/juce_Registry_windows.cpp"
diff --git a/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj b/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj
index c2655e2d6c..cfd6a186dc 100644
--- a/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj
+++ b/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj
@@ -1346,9 +1346,6 @@
true
-
- true
-
true
@@ -1382,9 +1379,6 @@
true
-
- true
-
true
@@ -3355,7 +3349,6 @@
-
diff --git a/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj.filters b/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj.filters
index 85a2c050d4..4a99297aac 100644
--- a/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj.filters
+++ b/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj.filters
@@ -1960,9 +1960,6 @@
JUCE Modules\juce_core\native
-
- JUCE Modules\juce_core\native
-
JUCE Modules\juce_core\native
@@ -2002,12 +1999,6 @@
JUCE Modules\juce_core\native
-
- JUCE Modules\juce_core\native
-
-
- JUCE Modules\juce_core\native
-
JUCE Modules\juce_core\native
@@ -5283,9 +5274,6 @@
JUCE Modules\juce_core\native
-
- JUCE Modules\juce_core\native
-
JUCE Modules\juce_core\native
diff --git a/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj b/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj
index f5f57bca6f..ee09c4c366 100644
--- a/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj
+++ b/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj
@@ -1346,9 +1346,6 @@
true
-
- true
-
true
@@ -1382,9 +1379,6 @@
true
-
- true
-
true
@@ -3355,7 +3349,6 @@
-
diff --git a/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj.filters b/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj.filters
index e3c0cbcf99..2f118afbfa 100644
--- a/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj.filters
+++ b/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj.filters
@@ -1960,9 +1960,6 @@
JUCE Modules\juce_core\native
-
- JUCE Modules\juce_core\native
-
JUCE Modules\juce_core\native
@@ -2002,12 +1999,6 @@
JUCE Modules\juce_core\native
-
- JUCE Modules\juce_core\native
-
-
- JUCE Modules\juce_core\native
-
JUCE Modules\juce_core\native
@@ -5283,9 +5274,6 @@
JUCE Modules\juce_core\native
-
- JUCE Modules\juce_core\native
-
JUCE Modules\juce_core\native
diff --git a/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj b/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj
index ebf6f6f7f0..376cc8967c 100644
--- a/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj
+++ b/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj
@@ -1346,9 +1346,6 @@
true
-
- true
-
true
@@ -1382,9 +1379,6 @@
true
-
- true
-
true
@@ -3355,7 +3349,6 @@
-
diff --git a/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj.filters b/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj.filters
index beecbab95f..0090613495 100644
--- a/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj.filters
+++ b/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj.filters
@@ -1960,9 +1960,6 @@
JUCE Modules\juce_core\native
-
- JUCE Modules\juce_core\native
-
JUCE Modules\juce_core\native
@@ -2002,12 +1999,6 @@
JUCE Modules\juce_core\native
-
- JUCE Modules\juce_core\native
-
-
- JUCE Modules\juce_core\native
-
JUCE Modules\juce_core\native
@@ -5283,9 +5274,6 @@
JUCE Modules\juce_core\native
-
- JUCE Modules\juce_core\native
-
JUCE Modules\juce_core\native
diff --git a/extras/AudioPerformanceTest/Builds/Android/app/CMakeLists.txt b/extras/AudioPerformanceTest/Builds/Android/app/CMakeLists.txt
index 3d44172fd5..595746c68e 100644
--- a/extras/AudioPerformanceTest/Builds/Android/app/CMakeLists.txt
+++ b/extras/AudioPerformanceTest/Builds/Android/app/CMakeLists.txt
@@ -935,12 +935,10 @@ add_library( ${BINARY_NAME}
"../../../../../modules/juce_core/native/juce_CFHelpers_mac.h"
"../../../../../modules/juce_core/native/juce_CommonFile_linux.cpp"
"../../../../../modules/juce_core/native/juce_ComSmartPtr_windows.h"
- "../../../../../modules/juce_core/native/juce_FileDescriptor_linux.cpp"
"../../../../../modules/juce_core/native/juce_Files_android.cpp"
"../../../../../modules/juce_core/native/juce_Files_linux.cpp"
"../../../../../modules/juce_core/native/juce_Files_mac.mm"
"../../../../../modules/juce_core/native/juce_Files_windows.cpp"
- "../../../../../modules/juce_core/native/juce_HighResolutionTimerThread.h"
"../../../../../modules/juce_core/native/juce_IPAddress_posix.h"
"../../../../../modules/juce_core/native/juce_JNIHelpers_android.cpp"
"../../../../../modules/juce_core/native/juce_JNIHelpers_android.h"
@@ -953,8 +951,6 @@ add_library( ${BINARY_NAME}
"../../../../../modules/juce_core/native/juce_Network_windows.cpp"
"../../../../../modules/juce_core/native/juce_ObjCHelpers_mac.h"
"../../../../../modules/juce_core/native/juce_PlatformTimer_generic.cpp"
- "../../../../../modules/juce_core/native/juce_PlatformTimer_linux.cpp"
- "../../../../../modules/juce_core/native/juce_PlatformTimer_mac.mm"
"../../../../../modules/juce_core/native/juce_PlatformTimer_windows.cpp"
"../../../../../modules/juce_core/native/juce_PlatformTimerListener.h"
"../../../../../modules/juce_core/native/juce_Registry_windows.cpp"
@@ -2694,12 +2690,10 @@ set_source_files_properties(
"../../../../../modules/juce_core/native/juce_CFHelpers_mac.h"
"../../../../../modules/juce_core/native/juce_CommonFile_linux.cpp"
"../../../../../modules/juce_core/native/juce_ComSmartPtr_windows.h"
- "../../../../../modules/juce_core/native/juce_FileDescriptor_linux.cpp"
"../../../../../modules/juce_core/native/juce_Files_android.cpp"
"../../../../../modules/juce_core/native/juce_Files_linux.cpp"
"../../../../../modules/juce_core/native/juce_Files_mac.mm"
"../../../../../modules/juce_core/native/juce_Files_windows.cpp"
- "../../../../../modules/juce_core/native/juce_HighResolutionTimerThread.h"
"../../../../../modules/juce_core/native/juce_IPAddress_posix.h"
"../../../../../modules/juce_core/native/juce_JNIHelpers_android.cpp"
"../../../../../modules/juce_core/native/juce_JNIHelpers_android.h"
@@ -2712,8 +2706,6 @@ set_source_files_properties(
"../../../../../modules/juce_core/native/juce_Network_windows.cpp"
"../../../../../modules/juce_core/native/juce_ObjCHelpers_mac.h"
"../../../../../modules/juce_core/native/juce_PlatformTimer_generic.cpp"
- "../../../../../modules/juce_core/native/juce_PlatformTimer_linux.cpp"
- "../../../../../modules/juce_core/native/juce_PlatformTimer_mac.mm"
"../../../../../modules/juce_core/native/juce_PlatformTimer_windows.cpp"
"../../../../../modules/juce_core/native/juce_PlatformTimerListener.h"
"../../../../../modules/juce_core/native/juce_Registry_windows.cpp"
diff --git a/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj b/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj
index 837e6a66db..3a122b09f0 100644
--- a/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj
+++ b/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj
@@ -1186,9 +1186,6 @@
true
-
- true
-
true
@@ -1222,9 +1219,6 @@
true
-
- true
-
true
@@ -2908,7 +2902,6 @@
-
diff --git a/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj.filters b/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj.filters
index 9dc1d4087b..0c8a0e1ed8 100644
--- a/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj.filters
+++ b/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj.filters
@@ -1669,9 +1669,6 @@
JUCE Modules\juce_core\native
-
- JUCE Modules\juce_core\native
-
JUCE Modules\juce_core\native
@@ -1711,12 +1708,6 @@
JUCE Modules\juce_core\native
-
- JUCE Modules\juce_core\native
-
-
- JUCE Modules\juce_core\native
-
JUCE Modules\juce_core\native
@@ -4560,9 +4551,6 @@
JUCE Modules\juce_core\native
-
- JUCE Modules\juce_core\native
-
JUCE Modules\juce_core\native
diff --git a/extras/AudioPluginHost/Builds/Android/app/CMakeLists.txt b/extras/AudioPluginHost/Builds/Android/app/CMakeLists.txt
index 0d6a033bd6..d26f5f241e 100644
--- a/extras/AudioPluginHost/Builds/Android/app/CMakeLists.txt
+++ b/extras/AudioPluginHost/Builds/Android/app/CMakeLists.txt
@@ -968,12 +968,10 @@ add_library( ${BINARY_NAME}
"../../../../../modules/juce_core/native/juce_CFHelpers_mac.h"
"../../../../../modules/juce_core/native/juce_CommonFile_linux.cpp"
"../../../../../modules/juce_core/native/juce_ComSmartPtr_windows.h"
- "../../../../../modules/juce_core/native/juce_FileDescriptor_linux.cpp"
"../../../../../modules/juce_core/native/juce_Files_android.cpp"
"../../../../../modules/juce_core/native/juce_Files_linux.cpp"
"../../../../../modules/juce_core/native/juce_Files_mac.mm"
"../../../../../modules/juce_core/native/juce_Files_windows.cpp"
- "../../../../../modules/juce_core/native/juce_HighResolutionTimerThread.h"
"../../../../../modules/juce_core/native/juce_IPAddress_posix.h"
"../../../../../modules/juce_core/native/juce_JNIHelpers_android.cpp"
"../../../../../modules/juce_core/native/juce_JNIHelpers_android.h"
@@ -986,8 +984,6 @@ add_library( ${BINARY_NAME}
"../../../../../modules/juce_core/native/juce_Network_windows.cpp"
"../../../../../modules/juce_core/native/juce_ObjCHelpers_mac.h"
"../../../../../modules/juce_core/native/juce_PlatformTimer_generic.cpp"
- "../../../../../modules/juce_core/native/juce_PlatformTimer_linux.cpp"
- "../../../../../modules/juce_core/native/juce_PlatformTimer_mac.mm"
"../../../../../modules/juce_core/native/juce_PlatformTimer_windows.cpp"
"../../../../../modules/juce_core/native/juce_PlatformTimerListener.h"
"../../../../../modules/juce_core/native/juce_Registry_windows.cpp"
@@ -2882,12 +2878,10 @@ set_source_files_properties(
"../../../../../modules/juce_core/native/juce_CFHelpers_mac.h"
"../../../../../modules/juce_core/native/juce_CommonFile_linux.cpp"
"../../../../../modules/juce_core/native/juce_ComSmartPtr_windows.h"
- "../../../../../modules/juce_core/native/juce_FileDescriptor_linux.cpp"
"../../../../../modules/juce_core/native/juce_Files_android.cpp"
"../../../../../modules/juce_core/native/juce_Files_linux.cpp"
"../../../../../modules/juce_core/native/juce_Files_mac.mm"
"../../../../../modules/juce_core/native/juce_Files_windows.cpp"
- "../../../../../modules/juce_core/native/juce_HighResolutionTimerThread.h"
"../../../../../modules/juce_core/native/juce_IPAddress_posix.h"
"../../../../../modules/juce_core/native/juce_JNIHelpers_android.cpp"
"../../../../../modules/juce_core/native/juce_JNIHelpers_android.h"
@@ -2900,8 +2894,6 @@ set_source_files_properties(
"../../../../../modules/juce_core/native/juce_Network_windows.cpp"
"../../../../../modules/juce_core/native/juce_ObjCHelpers_mac.h"
"../../../../../modules/juce_core/native/juce_PlatformTimer_generic.cpp"
- "../../../../../modules/juce_core/native/juce_PlatformTimer_linux.cpp"
- "../../../../../modules/juce_core/native/juce_PlatformTimer_mac.mm"
"../../../../../modules/juce_core/native/juce_PlatformTimer_windows.cpp"
"../../../../../modules/juce_core/native/juce_PlatformTimerListener.h"
"../../../../../modules/juce_core/native/juce_Registry_windows.cpp"
diff --git a/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj b/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj
index 062b8235d7..795945e645 100644
--- a/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj
+++ b/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj
@@ -1194,9 +1194,6 @@
true
-
- true
-
true
@@ -1230,9 +1227,6 @@
true
-
- true
-
true
@@ -3091,7 +3085,6 @@
-
diff --git a/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj.filters b/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj.filters
index d4ffffef44..4fcfcdf62c 100644
--- a/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj.filters
+++ b/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj.filters
@@ -1744,9 +1744,6 @@
JUCE Modules\juce_core\native
-
- JUCE Modules\juce_core\native
-
JUCE Modules\juce_core\native
@@ -1786,12 +1783,6 @@
JUCE Modules\juce_core\native
-
- JUCE Modules\juce_core\native
-
-
- JUCE Modules\juce_core\native
-
JUCE Modules\juce_core\native
@@ -4839,9 +4830,6 @@
JUCE Modules\juce_core\native
-
- JUCE Modules\juce_core\native
-
JUCE Modules\juce_core\native
diff --git a/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj b/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj
index 18a2e3aba4..46d9d4ca3b 100644
--- a/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj
+++ b/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj
@@ -1194,9 +1194,6 @@
true
-
- true
-
true
@@ -1230,9 +1227,6 @@
true
-
- true
-
true
@@ -3091,7 +3085,6 @@
-
diff --git a/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj.filters b/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj.filters
index 6a7ef6d789..2c0ff11d93 100644
--- a/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj.filters
+++ b/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj.filters
@@ -1744,9 +1744,6 @@
JUCE Modules\juce_core\native
-
- JUCE Modules\juce_core\native
-
JUCE Modules\juce_core\native
@@ -1786,12 +1783,6 @@
JUCE Modules\juce_core\native
-
- JUCE Modules\juce_core\native
-
-
- JUCE Modules\juce_core\native
-
JUCE Modules\juce_core\native
@@ -4839,9 +4830,6 @@
JUCE Modules\juce_core\native
-
- JUCE Modules\juce_core\native
-
JUCE Modules\juce_core\native
diff --git a/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj b/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj
index 5aece0efcf..2e8337e207 100644
--- a/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj
+++ b/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj
@@ -1194,9 +1194,6 @@
true
-
- true
-
true
@@ -1230,9 +1227,6 @@
true
-
- true
-
true
@@ -3091,7 +3085,6 @@
-
diff --git a/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj.filters b/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj.filters
index f7f405ca3c..d6a55b0f33 100644
--- a/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj.filters
+++ b/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj.filters
@@ -1744,9 +1744,6 @@
JUCE Modules\juce_core\native
-
- JUCE Modules\juce_core\native
-
JUCE Modules\juce_core\native
@@ -1786,12 +1783,6 @@
JUCE Modules\juce_core\native
-
- JUCE Modules\juce_core\native
-
-
- JUCE Modules\juce_core\native
-
JUCE Modules\juce_core\native
@@ -4839,9 +4830,6 @@
JUCE Modules\juce_core\native
-
- JUCE Modules\juce_core\native
-
JUCE Modules\juce_core\native
diff --git a/extras/BinaryBuilder/Builds/VisualStudio2022/BinaryBuilder_ConsoleApp.vcxproj b/extras/BinaryBuilder/Builds/VisualStudio2022/BinaryBuilder_ConsoleApp.vcxproj
index 438acdac27..504c088012 100644
--- a/extras/BinaryBuilder/Builds/VisualStudio2022/BinaryBuilder_ConsoleApp.vcxproj
+++ b/extras/BinaryBuilder/Builds/VisualStudio2022/BinaryBuilder_ConsoleApp.vcxproj
@@ -256,9 +256,6 @@
true
-
- true
-
true
@@ -292,9 +289,6 @@
true
-
- true
-
true
@@ -553,7 +547,6 @@
-
diff --git a/extras/BinaryBuilder/Builds/VisualStudio2022/BinaryBuilder_ConsoleApp.vcxproj.filters b/extras/BinaryBuilder/Builds/VisualStudio2022/BinaryBuilder_ConsoleApp.vcxproj.filters
index 908e7d2153..77902d1382 100644
--- a/extras/BinaryBuilder/Builds/VisualStudio2022/BinaryBuilder_ConsoleApp.vcxproj.filters
+++ b/extras/BinaryBuilder/Builds/VisualStudio2022/BinaryBuilder_ConsoleApp.vcxproj.filters
@@ -193,9 +193,6 @@
JUCE Modules\juce_core\native
-
- JUCE Modules\juce_core\native
-
JUCE Modules\juce_core\native
@@ -235,12 +232,6 @@
JUCE Modules\juce_core\native
-
- JUCE Modules\juce_core\native
-
-
- JUCE Modules\juce_core\native
-
JUCE Modules\juce_core\native
@@ -651,9 +642,6 @@
JUCE Modules\juce_core\native
-
- JUCE Modules\juce_core\native
-
JUCE Modules\juce_core\native
diff --git a/extras/NetworkGraphicsDemo/Builds/Android/app/CMakeLists.txt b/extras/NetworkGraphicsDemo/Builds/Android/app/CMakeLists.txt
index c96cded924..c17ac0a3f5 100644
--- a/extras/NetworkGraphicsDemo/Builds/Android/app/CMakeLists.txt
+++ b/extras/NetworkGraphicsDemo/Builds/Android/app/CMakeLists.txt
@@ -939,12 +939,10 @@ add_library( ${BINARY_NAME}
"../../../../../modules/juce_core/native/juce_CFHelpers_mac.h"
"../../../../../modules/juce_core/native/juce_CommonFile_linux.cpp"
"../../../../../modules/juce_core/native/juce_ComSmartPtr_windows.h"
- "../../../../../modules/juce_core/native/juce_FileDescriptor_linux.cpp"
"../../../../../modules/juce_core/native/juce_Files_android.cpp"
"../../../../../modules/juce_core/native/juce_Files_linux.cpp"
"../../../../../modules/juce_core/native/juce_Files_mac.mm"
"../../../../../modules/juce_core/native/juce_Files_windows.cpp"
- "../../../../../modules/juce_core/native/juce_HighResolutionTimerThread.h"
"../../../../../modules/juce_core/native/juce_IPAddress_posix.h"
"../../../../../modules/juce_core/native/juce_JNIHelpers_android.cpp"
"../../../../../modules/juce_core/native/juce_JNIHelpers_android.h"
@@ -957,8 +955,6 @@ add_library( ${BINARY_NAME}
"../../../../../modules/juce_core/native/juce_Network_windows.cpp"
"../../../../../modules/juce_core/native/juce_ObjCHelpers_mac.h"
"../../../../../modules/juce_core/native/juce_PlatformTimer_generic.cpp"
- "../../../../../modules/juce_core/native/juce_PlatformTimer_linux.cpp"
- "../../../../../modules/juce_core/native/juce_PlatformTimer_mac.mm"
"../../../../../modules/juce_core/native/juce_PlatformTimer_windows.cpp"
"../../../../../modules/juce_core/native/juce_PlatformTimerListener.h"
"../../../../../modules/juce_core/native/juce_Registry_windows.cpp"
@@ -2778,12 +2774,10 @@ set_source_files_properties(
"../../../../../modules/juce_core/native/juce_CFHelpers_mac.h"
"../../../../../modules/juce_core/native/juce_CommonFile_linux.cpp"
"../../../../../modules/juce_core/native/juce_ComSmartPtr_windows.h"
- "../../../../../modules/juce_core/native/juce_FileDescriptor_linux.cpp"
"../../../../../modules/juce_core/native/juce_Files_android.cpp"
"../../../../../modules/juce_core/native/juce_Files_linux.cpp"
"../../../../../modules/juce_core/native/juce_Files_mac.mm"
"../../../../../modules/juce_core/native/juce_Files_windows.cpp"
- "../../../../../modules/juce_core/native/juce_HighResolutionTimerThread.h"
"../../../../../modules/juce_core/native/juce_IPAddress_posix.h"
"../../../../../modules/juce_core/native/juce_JNIHelpers_android.cpp"
"../../../../../modules/juce_core/native/juce_JNIHelpers_android.h"
@@ -2796,8 +2790,6 @@ set_source_files_properties(
"../../../../../modules/juce_core/native/juce_Network_windows.cpp"
"../../../../../modules/juce_core/native/juce_ObjCHelpers_mac.h"
"../../../../../modules/juce_core/native/juce_PlatformTimer_generic.cpp"
- "../../../../../modules/juce_core/native/juce_PlatformTimer_linux.cpp"
- "../../../../../modules/juce_core/native/juce_PlatformTimer_mac.mm"
"../../../../../modules/juce_core/native/juce_PlatformTimer_windows.cpp"
"../../../../../modules/juce_core/native/juce_PlatformTimerListener.h"
"../../../../../modules/juce_core/native/juce_Registry_windows.cpp"
diff --git a/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj b/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj
index 749b6fee0c..fc9d0182d1 100644
--- a/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj
+++ b/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj
@@ -1186,9 +1186,6 @@
true
-
- true
-
true
@@ -1222,9 +1219,6 @@
true
-
- true
-
true
@@ -2999,7 +2993,6 @@
-
diff --git a/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj.filters b/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj.filters
index a59b1c15e4..910f7564c6 100644
--- a/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj.filters
+++ b/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj.filters
@@ -1699,9 +1699,6 @@
JUCE Modules\juce_core\native
-
- JUCE Modules\juce_core\native
-
JUCE Modules\juce_core\native
@@ -1741,12 +1738,6 @@
JUCE Modules\juce_core\native
-
- JUCE Modules\juce_core\native
-
-
- JUCE Modules\juce_core\native
-
JUCE Modules\juce_core\native
@@ -4701,9 +4692,6 @@
JUCE Modules\juce_core\native
-
- JUCE Modules\juce_core\native
-
JUCE Modules\juce_core\native
diff --git a/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj b/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj
index 5aabe5e9b9..70e948210a 100644
--- a/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj
+++ b/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj
@@ -392,9 +392,6 @@
true
-
- true
-
true
@@ -428,9 +425,6 @@
true
-
- true
-
true
@@ -1846,7 +1840,6 @@
-
diff --git a/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj.filters b/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj.filters
index 878c673341..b0fc221c32 100644
--- a/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj.filters
+++ b/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj.filters
@@ -670,9 +670,6 @@
JUCE Modules\juce_core\native
-
- JUCE Modules\juce_core\native
-
JUCE Modules\juce_core\native
@@ -712,12 +709,6 @@
JUCE Modules\juce_core\native
-
- JUCE Modules\juce_core\native
-
-
- JUCE Modules\juce_core\native
-
JUCE Modules\juce_core\native
@@ -2724,9 +2715,6 @@
JUCE Modules\juce_core\native
-
- JUCE Modules\juce_core\native
-
JUCE Modules\juce_core\native
diff --git a/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj b/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj
index 20bb0d163c..604c7878c0 100644
--- a/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj
+++ b/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj
@@ -392,9 +392,6 @@
true
-
- true
-
true
@@ -428,9 +425,6 @@
true
-
- true
-
true
@@ -1846,7 +1840,6 @@
-
diff --git a/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj.filters b/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj.filters
index 28a47abfe3..bf6b52ad66 100644
--- a/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj.filters
+++ b/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj.filters
@@ -670,9 +670,6 @@
JUCE Modules\juce_core\native
-
- JUCE Modules\juce_core\native
-
JUCE Modules\juce_core\native
@@ -712,12 +709,6 @@
JUCE Modules\juce_core\native
-
- JUCE Modules\juce_core\native
-
-
- JUCE Modules\juce_core\native
-
JUCE Modules\juce_core\native
@@ -2724,9 +2715,6 @@
JUCE Modules\juce_core\native
-
- JUCE Modules\juce_core\native
-
JUCE Modules\juce_core\native
diff --git a/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj b/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj
index b1d0efcd6f..9f8b23e59f 100644
--- a/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj
+++ b/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj
@@ -392,9 +392,6 @@
true
-
- true
-
true
@@ -428,9 +425,6 @@
true
-
- true
-
true
@@ -1846,7 +1840,6 @@
-
diff --git a/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj.filters b/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj.filters
index a8191832d3..15c39f8c7e 100644
--- a/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj.filters
+++ b/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj.filters
@@ -670,9 +670,6 @@
JUCE Modules\juce_core\native
-
- JUCE Modules\juce_core\native
-
JUCE Modules\juce_core\native
@@ -712,12 +709,6 @@
JUCE Modules\juce_core\native
-
- JUCE Modules\juce_core\native
-
-
- JUCE Modules\juce_core\native
-
JUCE Modules\juce_core\native
@@ -2724,9 +2715,6 @@
JUCE Modules\juce_core\native
-
- JUCE Modules\juce_core\native
-
JUCE Modules\juce_core\native
diff --git a/extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj b/extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj
index e79151ce74..092d4d4a86 100644
--- a/extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj
+++ b/extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj
@@ -1202,9 +1202,6 @@
true
-
- true
-
true
@@ -1238,9 +1235,6 @@
true
-
- true
-
true
@@ -3157,7 +3151,6 @@
-
diff --git a/extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj.filters b/extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj.filters
index 043503eeed..b7e10e429d 100644
--- a/extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj.filters
+++ b/extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj.filters
@@ -1768,9 +1768,6 @@
JUCE Modules\juce_core\native
-
- JUCE Modules\juce_core\native
-
JUCE Modules\juce_core\native
@@ -1810,12 +1807,6 @@
JUCE Modules\juce_core\native
-
- JUCE Modules\juce_core\native
-
-
- JUCE Modules\juce_core\native
-
JUCE Modules\juce_core\native
@@ -4929,9 +4920,6 @@
JUCE Modules\juce_core\native
-
- JUCE Modules\juce_core\native
-
JUCE Modules\juce_core\native
diff --git a/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj b/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj
index a63b929ada..37cb2fb961 100644
--- a/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj
+++ b/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj
@@ -1202,9 +1202,6 @@
true
-
- true
-
true
@@ -1238,9 +1235,6 @@
true
-
- true
-
true
@@ -3157,7 +3151,6 @@
-
diff --git a/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj.filters b/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj.filters
index dcff85ab4c..52c631f8f8 100644
--- a/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj.filters
+++ b/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj.filters
@@ -1768,9 +1768,6 @@
JUCE Modules\juce_core\native
-
- JUCE Modules\juce_core\native
-
JUCE Modules\juce_core\native
@@ -1810,12 +1807,6 @@
JUCE Modules\juce_core\native
-
- JUCE Modules\juce_core\native
-
-
- JUCE Modules\juce_core\native
-
JUCE Modules\juce_core\native
@@ -4929,9 +4920,6 @@
JUCE Modules\juce_core\native
-
- JUCE Modules\juce_core\native
-
JUCE Modules\juce_core\native
diff --git a/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj b/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj
index a108af5e49..df5b611280 100644
--- a/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj
+++ b/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj
@@ -1202,9 +1202,6 @@
true
-
- true
-
true
@@ -1238,9 +1235,6 @@
true
-
- true
-
true
@@ -3157,7 +3151,6 @@
-
diff --git a/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj.filters b/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj.filters
index fe03147190..635d74841f 100644
--- a/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj.filters
+++ b/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj.filters
@@ -1768,9 +1768,6 @@
JUCE Modules\juce_core\native
-
- JUCE Modules\juce_core\native
-
JUCE Modules\juce_core\native
@@ -1810,12 +1807,6 @@
JUCE Modules\juce_core\native
-
- JUCE Modules\juce_core\native
-
-
- JUCE Modules\juce_core\native
-
JUCE Modules\juce_core\native
@@ -4929,9 +4920,6 @@
JUCE Modules\juce_core\native
-
- JUCE Modules\juce_core\native
-
JUCE Modules\juce_core\native
diff --git a/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj b/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj
index de0333ddbb..72f9183760 100644
--- a/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj
+++ b/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj
@@ -1185,9 +1185,6 @@
true
-
- true
-
true
@@ -1221,9 +1218,6 @@
true
-
- true
-
true
@@ -2975,7 +2969,6 @@
-
diff --git a/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj.filters b/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj.filters
index 72a786b72f..43806d2f2f 100644
--- a/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj.filters
+++ b/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj.filters
@@ -1696,9 +1696,6 @@
JUCE Modules\juce_core\native
-
- JUCE Modules\juce_core\native
-
JUCE Modules\juce_core\native
@@ -1738,12 +1735,6 @@
JUCE Modules\juce_core\native
-
- JUCE Modules\juce_core\native
-
-
- JUCE Modules\juce_core\native
-
JUCE Modules\juce_core\native
@@ -4668,9 +4659,6 @@
JUCE Modules\juce_core\native
-
- JUCE Modules\juce_core\native
-
JUCE Modules\juce_core\native
diff --git a/modules/juce_core/juce_core.cpp b/modules/juce_core/juce_core.cpp
index 5319e9832b..6ed8bd9c0e 100644
--- a/modules/juce_core/juce_core.cpp
+++ b/modules/juce_core/juce_core.cpp
@@ -188,7 +188,6 @@
#include "files/juce_WildcardFileFilter.cpp"
#include "native/juce_ThreadPriorities_native.h"
#include "native/juce_PlatformTimerListener.h"
-#include "native/juce_HighResolutionTimerThread.h"
//==============================================================================
#if ! JUCE_WINDOWS
@@ -207,7 +206,7 @@
#include "native/juce_SharedCode_intel.h"
#include "native/juce_SystemStats_mac.mm"
#include "native/juce_Threads_mac.mm"
- #include "native/juce_PlatformTimer_mac.mm"
+ #include "native/juce_PlatformTimer_generic.cpp"
//==============================================================================
#elif JUCE_WINDOWS
@@ -228,8 +227,7 @@
#endif
#include "native/juce_SystemStats_linux.cpp"
#include "native/juce_Threads_linux.cpp"
- #include "native/juce_FileDescriptor_linux.cpp"
- #include "native/juce_PlatformTimer_linux.cpp"
+ #include "native/juce_PlatformTimer_generic.cpp"
//==============================================================================
#elif JUCE_BSD
@@ -254,8 +252,7 @@
#include "native/juce_SystemStats_android.cpp"
#include "native/juce_Threads_android.cpp"
#include "native/juce_RuntimePermissions_android.cpp"
- #include "native/juce_FileDescriptor_linux.cpp"
- #include "native/juce_PlatformTimer_linux.cpp"
+ #include "native/juce_PlatformTimer_generic.cpp"
//==============================================================================
#elif JUCE_WASM
diff --git a/modules/juce_core/native/juce_FileDescriptor_linux.cpp b/modules/juce_core/native/juce_FileDescriptor_linux.cpp
deleted file mode 100644
index 28e0a4b51b..0000000000
--- a/modules/juce_core/native/juce_FileDescriptor_linux.cpp
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- ==============================================================================
-
- This file is part of the JUCE library.
- Copyright (c) 2022 - Raw Material Software Limited
-
- JUCE is an open source library subject to commercial or open-source
- licensing.
-
- The code included in this file is provided under the terms of the ISC license
- http://www.isc.org/downloads/software-support-policy/isc-license. Permission
- To use, copy, modify, and/or distribute this software for any purpose with or
- without fee is hereby granted provided that the above copyright notice and
- this permission notice appear in all copies.
-
- JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
- EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
- DISCLAIMED.
-
- ==============================================================================
-*/
-
-namespace juce
-{
-
-class FileDescriptor
-{
-public:
- explicit FileDescriptor (int fileDescriptorId)
- : id { fileDescriptorId } {}
-
- ~FileDescriptor()
- {
- if (isValid())
- close (id);
- }
-
- bool isValid() const { return id >= 0; }
- int get() const { return id; }
-
- template
- DataType readData() const
- {
- if (! isValid())
- return {};
-
- alignas (DataType) std::array buffer;
- size_t numberOfBytesRead { 0 };
-
- while (numberOfBytesRead < buffer.size())
- {
- const auto result = read (get(), buffer.data() + numberOfBytesRead, buffer.size() - numberOfBytesRead);
-
- if (result < 0)
- return {};
-
- numberOfBytesRead += (size_t) result;
- }
-
- return readUnaligned (buffer.data());
- }
-
- template
- void writeData (const DataType& value) const
- {
- if (! isValid())
- return;
-
- alignas (DataType) std::array buffer;
- writeUnaligned (buffer.data(), value);
- size_t numberOfBytesWritten { 0 };
-
- while (numberOfBytesWritten < buffer.size())
- {
- const auto result = write (get(), buffer.data() + numberOfBytesWritten, buffer.size() - numberOfBytesWritten);
-
- if (result < 0)
- return;
-
- numberOfBytesWritten += (size_t) result;
- }
- }
-
-private:
- int id{};
-
- JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (FileDescriptor)
- JUCE_DECLARE_NON_MOVEABLE (FileDescriptor)
-};
-
-class EventFd
-{
-public:
- EventFd() = default;
- void signal() const { fd.writeData ((uint64_t) 1); }
-
- int get() const { return fd.get(); }
- bool isValid() const { return fd.isValid(); }
-
-private:
- FileDescriptor fd { eventfd (0, EFD_CLOEXEC) };
-
- JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (EventFd)
- JUCE_DECLARE_NON_MOVEABLE (EventFd)
-};
-
-class TimerFd
-{
-public:
- TimerFd() = default;
-
- bool setIntervalMs (int ms) const
- {
- if (! fd.isValid())
- return false;
-
- jassert (ms >= 0);
-
- const auto seconds = ms / 1'000;
- const auto nanoseconds = (ms % 1'000) * 1'000'000;
-
- const itimerspec spec
- {
- { seconds, nanoseconds },
- { seconds, nanoseconds }
- };
-
- return timerfd_settime (fd.get(), 0, &spec, nullptr) == 0;
- }
-
- int getIntervalMs() const
- {
- if (! fd.isValid())
- return 0;
-
- itimerspec result{};
-
- if (timerfd_gettime (fd.get(), &result) != 0)
- return 0;
-
- return static_cast (result.it_interval.tv_sec * 1'000 + result.it_interval.tv_nsec / 1'000'000);
- }
-
- int getAndClearNumberOfExpirations() const
- {
- return (int) fd.readData();
- }
-
- int get() const { return fd.get(); }
- bool isValid() const { return fd.isValid(); }
-
-private:
- FileDescriptor fd { timerfd_create (CLOCK_MONOTONIC, TFD_CLOEXEC | TFD_NONBLOCK) };
-
- JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (TimerFd)
- JUCE_DECLARE_NON_MOVEABLE (TimerFd)
-};
-
-} // namespace juce
diff --git a/modules/juce_core/native/juce_HighResolutionTimerThread.h b/modules/juce_core/native/juce_HighResolutionTimerThread.h
deleted file mode 100644
index a6f87b8d09..0000000000
--- a/modules/juce_core/native/juce_HighResolutionTimerThread.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- ==============================================================================
-
- This file is part of the JUCE library.
- Copyright (c) 2022 - Raw Material Software Limited
-
- JUCE is an open source library subject to commercial or open-source
- licensing.
-
- The code included in this file is provided under the terms of the ISC license
- http://www.isc.org/downloads/software-support-policy/isc-license. Permission
- To use, copy, modify, and/or distribute this software for any purpose with or
- without fee is hereby granted provided that the above copyright notice and
- this permission notice appear in all copies.
-
- JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
- EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
- DISCLAIMED.
-
- ==============================================================================
-*/
-
-namespace juce
-{
-
-class HighResolutionTimerThread final : private Thread
-{
-public:
- struct Impl
- {
- virtual ~Impl() = default;
- virtual void runThread() = 0;
- virtual void signalThreadShouldExit() = 0;
- };
-
- HighResolutionTimerThread (Impl& implementation)
- : Thread { "HighResolutionTimerThread" },
- impl { implementation }
- {
- startThread (Thread::Priority::highest);
- }
-
- ~HighResolutionTimerThread() override
- {
- impl.signalThreadShouldExit();
- waitForThreadToExit (-1);
- }
-
- bool isRunning() const { return isThreadRunning(); }
-
-private:
- void run() override
- {
- impl.runThread();
- }
-
- Impl& impl;
-
- JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (HighResolutionTimerThread)
- JUCE_DECLARE_NON_MOVEABLE (HighResolutionTimerThread)
-};
-
-} // namespace juce
diff --git a/modules/juce_core/native/juce_PlatformTimerListener.h b/modules/juce_core/native/juce_PlatformTimerListener.h
index a62e24c6cf..fe04fa7373 100644
--- a/modules/juce_core/native/juce_PlatformTimerListener.h
+++ b/modules/juce_core/native/juce_PlatformTimerListener.h
@@ -26,7 +26,7 @@ namespace juce
struct PlatformTimerListener
{
virtual ~PlatformTimerListener() = default;
- virtual void onTimerExpired (int numberOfExpirations) = 0;
+ virtual void onTimerExpired() = 0;
};
} // namespace juce
diff --git a/modules/juce_core/native/juce_PlatformTimer_generic.cpp b/modules/juce_core/native/juce_PlatformTimer_generic.cpp
index 57df331ff8..321e5f7fb0 100644
--- a/modules/juce_core/native/juce_PlatformTimer_generic.cpp
+++ b/modules/juce_core/native/juce_PlatformTimer_generic.cpp
@@ -23,86 +23,124 @@
namespace juce
{
-class PlatformTimer final : private HighResolutionTimerThread::Impl
+class PlatformTimer final : private Thread
{
public:
explicit PlatformTimer (PlatformTimerListener& ptl)
- : listener { ptl } {}
+ : Thread { "HighResolutionTimerThread" },
+ listener { ptl }
+ {
+ startThread (Priority::highest);
+ }
+
+ ~PlatformTimer()
+ {
+ stopThread (-1);
+ }
void startTimer (int newIntervalMs)
{
- if (! thread.isRunning())
- return;
+ jassert (newIntervalMs > 0);
+ jassert (timer == nullptr);
{
- std::scoped_lock lock { mutex };
- intervalMs = newIntervalMs;
- nextEventTime = Time::getCurrentTime() + RelativeTime::milliseconds (newIntervalMs);
+ std::scoped_lock lock { runCopyMutex };
+ timer = std::make_shared (listener, newIntervalMs);
}
- event.signal();
+ notify();
}
void cancelTimer()
{
- jassert (thread.isRunning());
+ jassert (timer != nullptr);
- {
- std::scoped_lock lock { mutex };
- jassert (intervalMs > 0);
- intervalMs = 0;
- }
+ timer->cancel();
- event.signal();
+ // Note the only race condition we need to protect against
+ // here is the copy in run().
+ //
+ // Calls to startTimer(), cancelTimer(), and getIntervalMs()
+ // are already guaranteed to be both thread safe and well
+ // synchronised.
+
+ std::scoped_lock lock { runCopyMutex };
+ timer = nullptr;
}
int getIntervalMs() const
{
- std::scoped_lock lock { mutex };
- return thread.isRunning() ? intervalMs : 0;
+ return isThreadRunning() && timer != nullptr ? timer->getIntervalMs() : 0;
}
private:
- int millisecondsUntilNextEvent()
+ void run() final
{
- std::scoped_lock lock { mutex };
- return intervalMs > 0 ? jmax (0, (int) (nextEventTime - Time::getCurrentTime()).inMilliseconds()) : -1;
- }
-
- bool nextEvent()
- {
- std::scoped_lock lock { mutex };
- if (intervalMs <= 0 || nextEventTime > Time::getCurrentTime())
- return false;
-
- nextEventTime += RelativeTime::milliseconds (intervalMs);
- return true;
- }
-
- void runThread() override
- {
- while (! shouldExitThread.load())
+ const auto copyTimer = [&]
{
- if (nextEvent())
- listener.onTimerExpired (1);
- else
- event.wait (millisecondsUntilNextEvent());
+ std::scoped_lock lock { runCopyMutex };
+ return timer;
+ };
+
+ while (! threadShouldExit())
+ {
+ if (auto t = copyTimer())
+ t->run();
+
+ wait (-1);
}
}
- void signalThreadShouldExit() override
+ class Timer
{
- shouldExitThread.store (true);
- event.signal();
- }
+ public:
+ Timer (PlatformTimerListener& l, int i)
+ : listener { l }, intervalMs { i } {}
+
+ int getIntervalMs() const
+ {
+ return intervalMs;
+ }
+
+ void cancel()
+ {
+ stop.signal();
+ }
+
+ void run()
+ {
+ #if JUCE_MAC || JUCE_IOS
+ tryToUpgradeCurrentThreadToRealtime (Thread::RealtimeOptions{}.withPeriodMs (intervalMs));
+ #endif
+
+ const auto millisecondsUntil = [] (auto time)
+ {
+ return jmax (0.0, time - Time::getMillisecondCounterHiRes());
+ };
+
+ while (! stop.wait (millisecondsUntil (nextEventTime)))
+ {
+ if (Time::getMillisecondCounterHiRes() >= nextEventTime)
+ {
+ listener.onTimerExpired();
+ nextEventTime += intervalMs;
+ }
+ }
+ }
+
+ private:
+ PlatformTimerListener& listener;
+ const int intervalMs;
+ double nextEventTime = Time::getMillisecondCounterHiRes() + intervalMs;
+ WaitableEvent stop { true };
+
+ JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (Timer)
+ JUCE_DECLARE_NON_MOVEABLE (Timer)
+ };
PlatformTimerListener& listener;
- mutable std::mutex mutex;
- int intervalMs{};
- Time nextEventTime;
- WaitableEvent event;
- std::atomic shouldExitThread { false };
- HighResolutionTimerThread thread { *this };
+ mutable std::mutex runCopyMutex;
+ std::shared_ptr timer;
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (PlatformTimer)
JUCE_DECLARE_NON_MOVEABLE (PlatformTimer)
diff --git a/modules/juce_core/native/juce_PlatformTimer_linux.cpp b/modules/juce_core/native/juce_PlatformTimer_linux.cpp
deleted file mode 100644
index 875ca129ad..0000000000
--- a/modules/juce_core/native/juce_PlatformTimer_linux.cpp
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- ==============================================================================
-
- This file is part of the JUCE library.
- Copyright (c) 2022 - Raw Material Software Limited
-
- JUCE is an open source library subject to commercial or open-source
- licensing.
-
- The code included in this file is provided under the terms of the ISC license
- http://www.isc.org/downloads/software-support-policy/isc-license. Permission
- To use, copy, modify, and/or distribute this software for any purpose with or
- without fee is hereby granted provided that the above copyright notice and
- this permission notice appear in all copies.
-
- JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
- EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
- DISCLAIMED.
-
- ==============================================================================
-*/
-
-namespace juce
-{
-
-class PlatformTimer final : private HighResolutionTimerThread::Impl
-{
-public:
- explicit PlatformTimer (PlatformTimerListener& ptl)
- : listener { ptl } {}
-
- void startTimer (int newIntervalMs)
- {
- timer.setIntervalMs (newIntervalMs);
- }
-
- void cancelTimer()
- {
- startTimer (0);
- }
-
- int getIntervalMs() const
- {
- return thread.isRunning() ? timer.getIntervalMs() : 0;
- }
-
-private:
- void runThread() override
- {
- if (! (timer.isValid() && exitThread.isValid()))
- return;
-
- pollfd pollData[]
- {
- { timer.get(), POLLIN, 0 },
- { exitThread.get(), POLLIN, 0 }
- };
-
- const auto& [timerPollData, exitThreadPollData] = pollData;
-
- for (;;)
- {
- if (poll (pollData, numElementsInArray (pollData), -1) <= 0)
- return;
-
- if (exitThreadPollData.revents & POLLIN)
- return;
-
- if (timerPollData.revents & POLLIN)
- listener.onTimerExpired (timer.getAndClearNumberOfExpirations());
- }
- }
-
- void signalThreadShouldExit() override
- {
- exitThread.signal();
- }
-
- PlatformTimerListener& listener;
- const TimerFd timer;
- const EventFd exitThread;
- HighResolutionTimerThread thread { *this };
-
- JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (PlatformTimer)
- JUCE_DECLARE_NON_MOVEABLE (PlatformTimer)
-};
-
-}
diff --git a/modules/juce_core/native/juce_PlatformTimer_mac.mm b/modules/juce_core/native/juce_PlatformTimer_mac.mm
deleted file mode 100644
index 9ad7b690f6..0000000000
--- a/modules/juce_core/native/juce_PlatformTimer_mac.mm
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- ==============================================================================
-
- This file is part of the JUCE library.
- Copyright (c) 2022 - Raw Material Software Limited
-
- JUCE is an open source library subject to commercial or open-source
- licensing.
-
- The code included in this file is provided under the terms of the ISC license
- http://www.isc.org/downloads/software-support-policy/isc-license. Permission
- To use, copy, modify, and/or distribute this software for any purpose with or
- without fee is hereby granted provided that the above copyright notice and
- this permission notice appear in all copies.
-
- JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
- EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
- DISCLAIMED.
-
- ==============================================================================
-*/
-
-namespace juce
-{
-
-class PlatformTimer final : private HighResolutionTimerThread::Impl
-{
-public:
- explicit PlatformTimer (PlatformTimerListener& ptl)
- : listener { ptl } {}
-
- void startTimer (int newIntervalMs)
- {
- jassert (newIntervalMs > 0);
- jassert (timer == nullptr);
-
- if (runLoop == nullptr)
- return;
-
- const auto intervalSeconds = static_cast (newIntervalMs) / 1'000.0;
-
- CFRunLoopTimerContext context{};
- context.info = &listener;
-
- const auto callback = [] (CFRunLoopTimerRef, void* ctx)
- {
- static_cast (ctx)->onTimerExpired (1);
- };
-
- timer.reset (CFRunLoopTimerCreate (kCFAllocatorDefault,
- intervalSeconds + CFAbsoluteTimeGetCurrent(),
- intervalSeconds,
- 0,
- 0,
- callback,
- &context));
-
- CFRunLoopAddTimer (runLoop, timer.get(), kCFRunLoopDefaultMode);
- }
-
- void cancelTimer()
- {
- jassert (runLoop != nullptr);
- jassert (timer != nullptr);
-
- CFRunLoopRemoveTimer (runLoop, timer.get(), kCFRunLoopDefaultMode);
- timer.reset();
- }
-
- int getIntervalMs() const
- {
- return timer != nullptr ? (int) (CFRunLoopTimerGetInterval (timer.get()) * 1'000.0) : 0;
- }
-
-private:
- static void preventRunLoopFromEarlyExits()
- {
- CFRunLoopSourceContext context{};
- CFRunLoopAddSource (CFRunLoopGetCurrent(),
- CFRunLoopSourceCreate (kCFAllocatorDefault, 0, &context),
- kCFRunLoopDefaultMode);
- }
-
- void setRunLoop()
- {
- CFRunLoopPerformBlock (CFRunLoopGetCurrent(), kCFRunLoopDefaultMode, ^()
- {
- runLoopPromise.set_value (CFRunLoopGetCurrent());
- });
- }
-
- void runThread() override
- {
- preventRunLoopFromEarlyExits();
- setRunLoop();
- CFRunLoopRun();
- }
-
- void signalThreadShouldExit() override
- {
- if (runLoop != nullptr)
- CFRunLoopStop (runLoop);
- }
-
- PlatformTimerListener& listener;
- CFUniquePtr timer;
- std::promise runLoopPromise;
- HighResolutionTimerThread thread { *this };
- CFRunLoopRef runLoop = [&]() -> CFRunLoopRef
- {
- return thread.isRunning() ? runLoopPromise.get_future().get() : nullptr;
- }();
-
- JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (PlatformTimer)
- JUCE_DECLARE_NON_MOVEABLE (PlatformTimer)
-};
-
-} // namespace juce
diff --git a/modules/juce_core/native/juce_PlatformTimer_windows.cpp b/modules/juce_core/native/juce_PlatformTimer_windows.cpp
index ad99b70f6c..13d3ead177 100644
--- a/modules/juce_core/native/juce_PlatformTimer_windows.cpp
+++ b/modules/juce_core/native/juce_PlatformTimer_windows.cpp
@@ -35,7 +35,7 @@ public:
const auto callback = [] (UINT, UINT, DWORD_PTR context, DWORD_PTR, DWORD_PTR)
{
- reinterpret_cast (context)->onTimerExpired (1);
+ reinterpret_cast (context)->onTimerExpired();
};
timerId = timeSetEvent ((UINT) newIntervalMs, 1, callback, (DWORD_PTR) &listener, TIME_PERIODIC | TIME_CALLBACK_FUNCTION);
diff --git a/modules/juce_core/threads/juce_HighResolutionTimer.cpp b/modules/juce_core/threads/juce_HighResolutionTimer.cpp
index 07172d2cd4..cec292233a 100644
--- a/modules/juce_core/threads/juce_HighResolutionTimer.cpp
+++ b/modules/juce_core/threads/juce_HighResolutionTimer.cpp
@@ -41,6 +41,8 @@ public:
if (timer.getIntervalMs() > 0)
timer.cancelTimer();
+ jassert (timer.getIntervalMs() == 0);
+
if (newIntervalMs > 0)
timer.startTimer (jmax (0, newIntervalMs));
@@ -64,26 +66,26 @@ public:
}
private:
- void onTimerExpired (int numberOfExpirations) final
+ void onTimerExpired() final
{
callbackThreadId.store (std::this_thread::get_id());
- std::scoped_lock lock { callbackMutex };
-
- shouldCancelCallbacks.store (! isTimerRunning());
-
- for (int i = 0; i < numberOfExpirations && ! shouldCancelCallbacks.load(); ++i)
{
- try
+ std::scoped_lock lock { callbackMutex };
+
+ if (isTimerRunning())
{
- owner.hiResTimerCallback();
- }
- catch (...)
- {
- // Exceptions thrown in a timer callback won't be
- // propagated to the main thread, it's best to find a
- // way to avoid them if possible
- jassertfalse;
+ try
+ {
+ owner.hiResTimerCallback();
+ }
+ catch (...)
+ {
+ // Exceptions thrown in a timer callback won't be
+ // propagated to the main thread, it's best to find
+ // a way to avoid them if possible
+ jassertfalse;
+ }
}
}
diff --git a/modules/juce_core/threads/juce_Thread.cpp b/modules/juce_core/threads/juce_Thread.cpp
index 759b613753..7136608803 100644
--- a/modules/juce_core/threads/juce_Thread.cpp
+++ b/modules/juce_core/threads/juce_Thread.cpp
@@ -285,7 +285,7 @@ void Thread::setAffinityMask (const uint32 newAffinityMask)
}
//==============================================================================
-bool Thread::wait (const int timeOutMilliseconds) const
+bool Thread::wait (double timeOutMilliseconds) const
{
return defaultEvent.wait (timeOutMilliseconds);
}
diff --git a/modules/juce_core/threads/juce_Thread.h b/modules/juce_core/threads/juce_Thread.h
index 65e2f0c5ec..8b9fd7c96e 100644
--- a/modules/juce_core/threads/juce_Thread.h
+++ b/modules/juce_core/threads/juce_Thread.h
@@ -440,7 +440,7 @@ public:
@returns true if the event has been signalled, false if the timeout expires.
*/
- bool wait (int timeOutMilliseconds) const;
+ bool wait (double timeOutMilliseconds) const;
/** Wakes up the thread.
diff --git a/modules/juce_core/threads/juce_ThreadPool.cpp b/modules/juce_core/threads/juce_ThreadPool.cpp
index e218966b68..3d6a78913f 100644
--- a/modules/juce_core/threads/juce_ThreadPool.cpp
+++ b/modules/juce_core/threads/juce_ThreadPool.cpp
@@ -169,13 +169,13 @@ void ThreadPool::addJob (std::function jobToRun)
{
struct LambdaJobWrapper : public ThreadPoolJob
{
- LambdaJobWrapper (std::function j) : ThreadPoolJob ("lambda"), job (j) {}
+ LambdaJobWrapper (std::function j) : ThreadPoolJob ("lambda"), job (std::move (j)) {}
JobStatus runJob() override { job(); return ThreadPoolJob::jobHasFinished; }
std::function job;
};
- addJob (new LambdaJobWrapper (jobToRun), true);
+ addJob (new LambdaJobWrapper (std::move (jobToRun)), true);
}
int ThreadPool::getNumJobs() const noexcept
diff --git a/modules/juce_core/threads/juce_WaitableEvent.cpp b/modules/juce_core/threads/juce_WaitableEvent.cpp
index 14323707b2..f2b29ab050 100644
--- a/modules/juce_core/threads/juce_WaitableEvent.cpp
+++ b/modules/juce_core/threads/juce_WaitableEvent.cpp
@@ -28,19 +28,19 @@ WaitableEvent::WaitableEvent (bool manualReset) noexcept
{
}
-bool WaitableEvent::wait (int timeOutMilliseconds) const
+bool WaitableEvent::wait (double timeOutMilliseconds) const
{
std::unique_lock lock (mutex);
if (! triggered)
{
- if (timeOutMilliseconds < 0)
+ if (timeOutMilliseconds < 0.0)
{
condition.wait (lock, [this] { return triggered == true; });
}
else
{
- if (! condition.wait_for (lock, std::chrono::milliseconds (timeOutMilliseconds),
+ if (! condition.wait_for (lock, std::chrono::duration { timeOutMilliseconds },
[this] { return triggered == true; }))
{
return false;
diff --git a/modules/juce_core/threads/juce_WaitableEvent.h b/modules/juce_core/threads/juce_WaitableEvent.h
index 406ad74ccd..ca55f904b1 100644
--- a/modules/juce_core/threads/juce_WaitableEvent.h
+++ b/modules/juce_core/threads/juce_WaitableEvent.h
@@ -61,7 +61,7 @@ public:
@returns true if the object has been signalled, false if the timeout expires first.
@see signal, reset
*/
- bool wait (int timeOutMilliseconds = -1) const;
+ bool wait (double timeOutMilliseconds = -1.0) const;
/** Wakes up any threads that are currently waiting on this object.