SHA256
Fix Busy Waiting Problem
This commit is contained in:
2 files changed
+7
-2
No files matched your search
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
Reference in new issue
Block a user