mirror of
https://github.com/Ale32bit/Capy64.git
synced 2025-01-18 18:46:43 +00:00
Added no yield timeout back
This commit is contained in:
parent
511515b9fa
commit
27bfd6d363
1 changed files with 26 additions and 4 deletions
|
@ -13,11 +13,13 @@ namespace Capy64.Runtime;
|
|||
public class LuaState : IDisposable
|
||||
{
|
||||
public Lua Thread;
|
||||
private Lua _parent;
|
||||
private readonly Lua _parent;
|
||||
|
||||
private ConcurrentQueue<LuaEvent> _queue = new();
|
||||
private readonly ConcurrentQueue<LuaEvent> _queue = new();
|
||||
|
||||
private string[] _eventFilters = Array.Empty<string>();
|
||||
private static readonly System.Timers.Timer yieldTimeoutTimer = new(TimeSpan.FromSeconds(3));
|
||||
private static bool yieldTimedOut = false;
|
||||
|
||||
public LuaState()
|
||||
{
|
||||
|
@ -34,11 +36,28 @@ public class LuaState : IDisposable
|
|||
|
||||
Thread = _parent.NewThread();
|
||||
|
||||
Thread.SetHook(LH_YieldTimeout, LuaHookMask.Count, 7000);
|
||||
yieldTimeoutTimer.Elapsed += (sender, ev) =>
|
||||
{
|
||||
yieldTimedOut = true;
|
||||
};
|
||||
|
||||
InitPlugins();
|
||||
|
||||
Thread.SetTop(0);
|
||||
}
|
||||
|
||||
private static void LH_YieldTimeout(IntPtr state, IntPtr ar)
|
||||
{
|
||||
var L = Lua.FromIntPtr(state);
|
||||
|
||||
if (yieldTimedOut)
|
||||
{
|
||||
L.Error("no yield timeout");
|
||||
Console.WriteLine("tick");
|
||||
}
|
||||
}
|
||||
|
||||
private void InitPlugins()
|
||||
{
|
||||
var allPlugins = new List<IPlugin>(Capy64.Instance.NativePlugins);
|
||||
|
@ -81,7 +100,7 @@ public class LuaState : IDisposable
|
|||
{
|
||||
npars = 0;
|
||||
|
||||
if (_queue.Count == 0)
|
||||
if (_queue.IsEmpty)
|
||||
return false;
|
||||
|
||||
if (!_queue.TryDequeue(out var ev))
|
||||
|
@ -109,8 +128,10 @@ public class LuaState : IDisposable
|
|||
Thread.Pop(npars);
|
||||
return true;
|
||||
}
|
||||
|
||||
yieldTimeoutTimer.Start();
|
||||
var status = Thread.Resume(null, npars, out var nresults);
|
||||
yieldTimedOut = false;
|
||||
yieldTimeoutTimer.Stop();
|
||||
|
||||
// the Lua script is finished, there's nothing else to resume
|
||||
if (status == LuaStatus.OK)
|
||||
|
@ -155,6 +176,7 @@ public class LuaState : IDisposable
|
|||
|
||||
public void Dispose()
|
||||
{
|
||||
GC.SuppressFinalize(this);
|
||||
_queue.Clear();
|
||||
Thread.Close();
|
||||
_parent.Close();
|
||||
|
|
Loading…
Reference in a new issue