public void process() { int t_wpos = Interlocked.Add(ref _wpos, 0); if (_rpos < t_wpos) { if (_networkInterface.fileter() != null) { _networkInterface.fileter().recv(messageReader, _buffer, (UInt32)_rpos, (UInt32)(t_wpos - _rpos)); } else { messageReader.process(_buffer, (UInt32)_rpos, (UInt32)(t_wpos - _rpos)); } Interlocked.Exchange(ref _rpos, t_wpos); } else if (t_wpos < _rpos) { if (_networkInterface.fileter() != null) { _networkInterface.fileter().recv(messageReader, _buffer, (UInt32)_rpos, (UInt32)(_buffer.Length - _rpos)); _networkInterface.fileter().recv(messageReader, _buffer, (UInt32)0, (UInt32)t_wpos); } else { messageReader.process(_buffer, (UInt32)_rpos, (UInt32)(_buffer.Length - _rpos)); messageReader.process(_buffer, (UInt32)0, (UInt32)t_wpos); } Interlocked.Exchange(ref _rpos, t_wpos); } else { // 没有可读数据 } }