1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-08 03:28:20 +02:00

Improve BeefCon cpu usage

This commit is contained in:
Brian Fiete 2024-12-24 13:56:39 -08:00
parent db449ed5a5
commit d5024964c8
2 changed files with 17 additions and 2 deletions

View file

@ -48,7 +48,7 @@ class Program
{ {
while (true) while (true)
{ {
switch (mPipe.ReadMessage(-1)) switch (mPipe.ReadMessage(20))
{ {
case .Ok(let msg): case .Ok(let msg):
uint8* ptr = msg.Ptr + 1; uint8* ptr = msg.Ptr + 1;

View file

@ -903,6 +903,7 @@ class BeefConConsoleProvider : ConsoleProvider
public bool mConnected; public bool mConnected;
public Thread mThread ~ delete _; public Thread mThread ~ delete _;
public Monitor mDataMonitor = new .() ~ delete _; public Monitor mDataMonitor = new .() ~ delete _;
public WaitEvent mDataEvent = new .() ~ delete _;
public int mPendingReadClear; public int mPendingReadClear;
public bool mExiting; public bool mExiting;
@ -949,6 +950,7 @@ class BeefConConsoleProvider : ConsoleProvider
using (mDataMonitor.Enter()) using (mDataMonitor.Enter())
{ {
mRecvStream.TryWrite(.(&data, len)); mRecvStream.TryWrite(.(&data, len));
mDataEvent.Set(true);
} }
case .Err(let err): case .Err(let err):
if ((err == .PipeListening) && (!mConnected)) if ((err == .PipeListening) && (!mConnected))
@ -1022,7 +1024,7 @@ class BeefConConsoleProvider : ConsoleProvider
} }
} }
public Result<Span<uint8>> ReadMessage(int timeoutMS) Result<Span<uint8>> DoReadMessage()
{ {
using (mDataMonitor.Enter()) using (mDataMonitor.Enter())
{ {
@ -1044,6 +1046,19 @@ class BeefConConsoleProvider : ConsoleProvider
return .Ok(.(mRecvStream.Memory.Ptr + 4, wantTotalLen - 4)); return .Ok(.(mRecvStream.Memory.Ptr + 4, wantTotalLen - 4));
} }
} }
public Result<Span<uint8>> ReadMessage(int timeoutMS)
{
if (timeoutMS != 0)
mDataEvent.WaitFor(timeoutMS);
using (mDataMonitor.Enter())
{
var result = DoReadMessage();
if (result case .Err)
mDataEvent.Reset();
return result;
}
}
} }
public static int sConId = 0; public static int sConId = 0;