Windows 10上PortMidi的死锁
问题描述:
我的代码现在使用PortMidi已有好几年了。
我使用它来编写便携式C++代码来控制外部MIDI表面控件类型Mackie。
我使用PortMidi最新版本:20101008
最近我们发现,当在Windows 10上使用控制时,我们会遇到死锁。 这只发生在Windows 10上。
当死锁状态下的线程被套牢:
Windows 10上PortMidi的死锁
ntdll!ZwWaitForSingleObject
KERNELBASE!WaitForSingleObjectEx
wdmaud!CMIDIOutDevice::WriteEvent
wdmaud!CMIDIOutDevice::PlaySysEx
wdmaud!HwModMessage
wdmaud!dspsL
WINMMBASE!midiMessage
WINMMBASE!midiOutLongMsg
MIDICommunication!winmm_write_flush
MIDICommunication!Pm_WriteSysEx
使用调试器,我发现代码正在等待一个事件(未锁)。
有没有人知道Windows 10上的PortMidi问题和/或如何解决它?
非常感谢,拉巴斯
答
四个月后...
在调试,我发现,如果你直接使用 Microsoft MIDI API这个问题同样存在。
由于这个原因,我与Microsoft一起打开了Premier Support Call。
经过长时间的调查(四个月)后,Microsoft确认这是Microsoft WinMM API实施中的缺陷,其中“...未正确处理PNP清除...”。
我被告知,此问题的修复将在RS5时间范围内发布。
Win10 [已知很麻烦](https://stackoverflow.com/a/32553208/17034)。确保你不会说谎,如果你传递了错误的价值,你会陷入僵局。 –