小编mvo*_*mvo的帖子

使用相同类型的多个设备时,midi命名不一致

在尝试使用相同类型硬件的多个USB midi设备时,我面临着设备命名的模糊行为.由于这可能是硬件/系统/驱动程序相关,这是我的一般设置:

  • 主机:Windows 8.1 x64(在多台机器上测试)
  • usb设备:2x Livid Brain V2(通用usb-midi接口)

这两个设备(相同的硬件,我们称之为设备X和Y)闪存有两种不同的固件风格,因此它们在midi枚举中显示不同的名称.如果我只连接设备X它将自己显示为"Brain2"/如果我只连接设备Y它是"Brain2B".这些是我从MIDIINCAPS/MIDIOUTCAPS(winmm.dll)获得的名称.到现在为止还挺好.

当我同时连接两个设备时,问题就出现了,而不是两个设备都得到相同的名称(后者连接) - 因此枚举会发生变化:

  • 先X,然后Y =>都得到名字"Brain2B"
  • 先Y,然后X =>都得到名字"Brain2"

但是,我可以访问和使用这些设备,但我不能再区分它们(这与两个设备上具有相同固件的起始位置基本相同).

如果有人能指出我正确的方向,我会很高兴.有没有人遇到类似的东西?这可能是系统相关的问题吗?(或者它是一个坏司机,也许?)提前谢谢!


编辑:

我用工具调用USB设备树查看器(类似于USBView)仔细查看了usb属性,结果发现标识符在那里是正确的.那么,winmm.dll如何获得midi枚举 - 它可能是一个错误吗?(不太可能)


莫里茨

(顺便说一句:这是制造商论坛中的相关主题/帖子:链接)

usb midi duplicates winmm midi-interface

6
推荐指数
0
解决办法
179
查看次数

防止对象的并发访问

想象一下节点网络(更新:'节点网络'意味着同一应用程序域中的对象,而不是独立应用程序的网络)将对象相互传递(并对它们进行一些处理).C#中是否存在用于将对象的访问限制为仅实际处理它的节点的模式?

主要动机:确保线程安全(无并发访问)和对象一致性(关于存储在其中的数据).

V1:我想到这样的事情:

class TransferredObject
    {
        public class AuthLock
        {
            public bool AllowOwnerChange { get; private set; }
            public void Unlock() { AllowOwnerChange = true; }
        }

        private AuthLock currentOwner;

        public AuthLock Own()
        {
            if (currentOwner != null && !currentOwner.AllowOwnerChange)
                throw new Exception("Cannot change owner, current lock is not released.");

            return currentOwner = new AuthLock();
        }

        public void DoSomething(AuthLock authentification)
        {
            if (currentOwner != authentification)
                throw new Exception("Don't you dare!");

            // be sure, that this is only …
Run Code Online (Sandbox Code Playgroud)

c# locking object restrict ownership

3
推荐指数
1
解决办法
3658
查看次数

标签 统计

c# ×1

duplicates ×1

locking ×1

midi ×1

midi-interface ×1

object ×1

ownership ×1

restrict ×1

usb ×1

winmm ×1