public unsafe void SendBuffer(byte *p, UInt32 size) { if (size >= WaitSends.BufferSize) { return; } lock (this) { if (PushBuffer.PushData(p, (int)size) == false) { long t = Support.Time.GetTickCount(); while (PopBuffer.Size != 0) { var t1 = Support.Time.GetTickCount(); if (t1 - t > 50000) { PopBuffer.Reset(); System.Diagnostics.Debug.Assert(false); break; } mSenderEvent.Set(); } var saved = PopBuffer; PopBuffer = PushBuffer; PushBuffer = saved; PushBuffer.PushData(p, (int)size); } mSenderEvent.Set(); } }
private void SendLoop() { while (IsRun) { mSenderEvent.WaitOne(); PopBuffer.Sender(this); lock (this) { var saved = PopBuffer; PopBuffer = PushBuffer; PushBuffer = saved; if (PopBuffer.Size == 0 && PushBuffer.Size == 0) { mSenderEvent.Reset(); } } } SendThreadStoped = true; }