CameraGateImpl.cs 961 B

12345678910111213141516171819202122232425262728293031
  1. using System;
  2. namespace IvfTl.Hardware.Impl
  3. {
  4. /// <summary>
  5. /// 全进程唯一相机原生调用锁实现。替代 control/operate/af 三套各自的 static locker(13 §②/§3.5)。
  6. /// 所有 CameraImpl 的 native 调用都经本类的同一把 _gate 锁串行化——跨相机、跨调用者一把锁,
  7. /// 因 mvcapi.dll 非线程安全。
  8. /// ⚠ 真机验证 V-011:一把全局锁是否拖慢多舱并行采集;如需要可后续改按相机分锁但保跨调用者互斥。
  9. /// </summary>
  10. public sealed class CameraGateImpl : ICameraGate
  11. {
  12. private readonly object _gate = new object();
  13. public T Invoke<T>(Func<T> nativeCall)
  14. {
  15. lock (_gate)
  16. {
  17. return nativeCall();
  18. }
  19. }
  20. public void Invoke(Action nativeCall)
  21. {
  22. lock (_gate)
  23. {
  24. nativeCall();
  25. }
  26. }
  27. }
  28. }