Ich denke, es ist eine Art Codeüberprüfung, aber hier ist meine Implementierung des Produzenten- / Verbrauchermusters. Was ich wissen möchte, ist, dass es einen Fall geben würde, in dem die während der Aufnahme von Thread () oder sendingThread () Methoden möglicherweise aufhören, auszuführen. Bitte beachten Sie, dass EnqueueSend (DataSendenQeueInfo -Info) < /code> aus mehreren verschiedenen Threads aufgerufen wird, und ich kann hier wahrscheinlich keine Aufgaben verwenden, da ich definitiv Befehle in einem separaten Thread konsumieren muss. < /P>
private Thread mReceivingThread;
private Thread mSendingThread;
private Queue mReceivingThreadQueue;
private Queue mSendingThreadQueue;
private readonly object mReceivingQueueLock = new object();
private readonly object mSendingQueueLock = new object();
private bool mIsRunning;
EventWaitHandle mRcWaitHandle;
EventWaitHandle mSeWaitHandle;
private void ReceivingThread()
{
while (mIsRunning)
{
mRcWaitHandle.WaitOne();
DataRecievedEnqeueInfo item = null;
while (mReceivingThreadQueue.Count > 0)
{
lock (mReceivingQueueLock)
{
item = mReceivingThreadQueue.Dequeue();
}
ProcessReceivingItem(item);
}
mRcWaitHandle.Reset();
}
}
private void SendingThread()
{
while (mIsRunning)
{
mSeWaitHandle.WaitOne();
while (mSendingThreadQueue.Count > 0)
{
DataSendEnqeueInfo item = null;
lock (mSendingQueueLock)
{
item = mSendingThreadQueue.Dequeue();
}
ProcessSendingItem(item);
}
mSeWaitHandle.Reset();
}
}
internal void EnqueueRecevingData(DataRecievedEnqeueInfo info)
{
lock (mReceivingQueueLock)
{
mReceivingThreadQueue.Enqueue(info);
mRcWaitHandle.Set();
}
}
public void EnqueueSend(DataSendEnqeueInfo info)
{
lock (mSendingQueueLock)
{
mSendingThreadQueue.Enqueue(info);
mSeWaitHandle.Set();
}
}
< /code>
P.S Die Idee hier ist, dass ich WaitHandle < /code> S Thread in den Schlaf einfügt, wenn die Warteschlange leer ist, und signalisieren, dass sie starten, wenn neue Elemente aufgenommen werden. https://blogs.msdn.microsoft.com/benwil ... t-parallel>
Produzent/ Verbrauchermuster mit Threads und EventWaithandle ⇐ C#
-
- Similar Topics
- Replies
- Views
- Last post
-
-
Der Kafka -Produzent löst beim Initiieren von Transaktionen eine Ausnahme aus
by Anonymous » » in C# - 0 Replies
- 8 Views
-
Last post by Anonymous
-