diff --git a/Core/RenderManager.cs b/Core/RenderManager.cs index f59dcda..3474e3c 100644 --- a/Core/RenderManager.cs +++ b/Core/RenderManager.cs @@ -63,6 +63,7 @@ namespace ADOFAIRenderer.Core // Thread and Queue State internal SortedList ImageQueue = new(); + internal AutoResetEvent FrameAvailableEvent = new(false); public Thread? RenderThread; public long passCount; public bool endRequested; @@ -236,6 +237,7 @@ namespace ADOFAIRenderer.Core Length = byteSize }; } + FrameAvailableEvent.Set(); } renderCheck = false; // 진행 허용 @@ -386,6 +388,7 @@ namespace ADOFAIRenderer.Core skipCount = 0; endRequested = false; endSuccessful = false; + FrameAvailableEvent.Reset(); var renderFPS = Configuration.RenderFPS; var videoFPS = Configuration.VideoFPS; @@ -493,7 +496,7 @@ namespace ADOFAIRenderer.Core if (passCount > lastRequestedVideoFrameIndex) break; } - Thread.Sleep(1); + FrameAvailableEvent.WaitOne(50); } if (isRenderCancelled) @@ -552,6 +555,7 @@ namespace ADOFAIRenderer.Core { isRenderCancelled = true; } + FrameAvailableEvent.Set(); skipPressToStart = false; _renderSetup = false; if (_escapeHandlerObj) @@ -664,7 +668,7 @@ namespace ADOFAIRenderer.Core { foreach (var kvp in ImageQueue.Values) { - if (kvp.ManagedBuffer != null && kvp.ManagedBuffer.Length > 0) + if (kvp.ManagedBuffer is { Length: > 0 }) { ArrayPool.Shared.Return(kvp.ManagedBuffer); } diff --git a/Util/FrameReader.cs b/Util/FrameReader.cs index 3ba0dbf..226573d 100644 --- a/Util/FrameReader.cs +++ b/Util/FrameReader.cs @@ -151,6 +151,7 @@ namespace ADOFAIRenderer.Util { RenderManager.Instance.ImageQueue[frame] = capturedFrame; } + RenderManager.Instance.FrameAvailableEvent.Set(); } public void Dispose()