Fix Busy Waiting Problem

This commit is contained in:
copecone committed 2026-06-14 12:48:08 +09:00
1 parent 0793a41035
commit 389e862ff8
2 files changed
+7 -2

No files matched your search

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