Meine Implementierung des Buffers

This commit is contained in:
2014-04-28 13:39:50 +02:00
parent d5ff331240
commit a384310766
2 changed files with 57 additions and 0 deletions

View File

@@ -70,6 +70,7 @@
<Compile Include="src\Online.cs" />
<Compile Include="src\Time.cs" />
<Compile Include="src\Buffer_Wafa.cs" />
<Compile Include="src\BufferManuel.cs" />
</ItemGroup>
<ItemGroup />
</Project>

56
src/BufferManuel.cs Normal file
View File

@@ -0,0 +1,56 @@
using System.Collections.Generic;
using System.Threading;
namespace WorldOfPeacecraft
{
class BufferManuel
{
private Queue<string> Lines = new Queue<string>();
private int MaxSize;
private AutoResetEvent QueueFullLock = new AutoResetEvent(false);
private AutoResetEvent QueueEmptyLock = new AutoResetEvent(false);
public BufferManuel (int maxSize)
{
this.MaxSize = maxSize;
}
public void AddLine (string line)
{
bool waitRequired = false;
lock (Lines) {
if (Lines.Count >= MaxSize) {
waitRequired = true;
QueueFullLock.Reset ();
}
}
if (waitRequired) {
QueueFullLock.WaitOne ();
}
lock (Lines) {
Lines.Enqueue (line);
QueueEmptyLock.Set();
}
}
public string NextLine ()
{
bool waitRequired = false;
string line;
lock (Lines) {
if (Lines.Count == 0) {
waitRequired = true;
QueueEmptyLock.Reset ();
}
}
if (waitRequired) {
QueueEmptyLock.WaitOne ();
}
lock (Lines) {
line = Lines.Dequeue();
QueueFullLock.Set ();
}
return line;
}
}
}