mirror of
https://github.com/goatcorp/Dalamud.git
synced 2026-01-03 06:13:40 +01:00
* wip * hacky fix for overlapping event text in profiler * move IsResumeGameAfterPluginLoad logic to PluginManager * fix some warnings * handle exceptions properly * remove ability to cancel, rename button to "hide" instead * undo Dalamud.Service refactor for now * warnings * add explainer, show which plugins are still loading * add some text if loading takes more than 3 minutes * undo wrong CS merge
60 lines
1.8 KiB
C#
60 lines
1.8 KiB
C#
using System.Runtime.CompilerServices;
|
|
|
|
namespace Dalamud.Utility;
|
|
|
|
/// <summary>
|
|
/// Helpers for working with thread safety.
|
|
/// </summary>
|
|
public static class ThreadSafety
|
|
{
|
|
[ThreadStatic]
|
|
private static bool threadStaticIsMainThread;
|
|
|
|
/// <summary>
|
|
/// Gets a value indicating whether the current thread is the main thread.
|
|
/// </summary>
|
|
public static bool IsMainThread => threadStaticIsMainThread;
|
|
|
|
/// <summary>
|
|
/// Throws an exception when the current thread is not the main thread.
|
|
/// </summary>
|
|
/// <exception cref="InvalidOperationException">Thrown when the current thread is not the main thread.</exception>
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
public static void AssertMainThread()
|
|
{
|
|
if (!threadStaticIsMainThread)
|
|
{
|
|
throw new InvalidOperationException("Not on main thread!");
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Throws an exception when the current thread is the main thread.
|
|
/// </summary>
|
|
/// <exception cref="InvalidOperationException">Thrown when the current thread is the main thread.</exception>
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
public static void AssertNotMainThread()
|
|
{
|
|
if (threadStaticIsMainThread)
|
|
{
|
|
throw new InvalidOperationException("On main thread!");
|
|
}
|
|
}
|
|
|
|
/// <summary><see cref="AssertMainThread"/>, but only on debug compilation mode.</summary>
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
public static void DebugAssertMainThread()
|
|
{
|
|
#if DEBUG
|
|
AssertMainThread();
|
|
#endif
|
|
}
|
|
|
|
/// <summary>
|
|
/// Marks a thread as the main thread.
|
|
/// </summary>
|
|
internal static void MarkMainThread()
|
|
{
|
|
threadStaticIsMainThread = true;
|
|
}
|
|
}
|