TPoller.cs 681 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. using System;
  2. using System.Collections.Generic;
  3. namespace Base
  4. {
  5. public class TPoller
  6. {
  7. // 线程同步队列,发送接收socket回调都放到该队列,由poll线程统一执行
  8. private Queue<Action> queue = new Queue<Action>();
  9. private Queue<Action> localQueue = new Queue<Action>();
  10. private readonly object lockObject = new object();
  11. public void Add(Action action)
  12. {
  13. lock (lockObject)
  14. {
  15. this.queue.Enqueue(action);
  16. }
  17. }
  18. public void Update()
  19. {
  20. lock (lockObject)
  21. {
  22. localQueue = queue;
  23. queue = new Queue<Action>();
  24. }
  25. while (this.localQueue.Count > 0)
  26. {
  27. Action a = this.localQueue.Dequeue();
  28. a();
  29. }
  30. }
  31. }
  32. }