コード例 #1
0
        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();
            }
        }
コード例 #2
0
        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;
        }