【问题标题】:Deadlock in PortMidi on Windows 10Windows 10 上的 PortMidi 死锁
【发布时间】:2017-10-09 13:05:40
【问题描述】:

我的代码已经使用PortMidi 好几年了。
我用它来编写可移植的 C++ 代码来控制 Mackie 类型的外部 MIDI Surface Control
我使用 PortMidi 最新版本:20101008

最近我们发现当该控件在 Windows 10 上被广泛使用,我们收到了死锁。 这仅在 Windows 10 上发生

当处于死锁状态时,以下线程被卡住:

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 问题和/或如何解决它吗?

非常感谢,帕兹

【问题讨论】:

  • Win10 是known to be troublesome。请确保您没有撒谎,如果您传递了错误的值,您将陷入僵局。

标签: c++ windows-10 midi


【解决方案1】:

4 个月后...
在调试时我发现如果你使用这个问题也存在 直接Microsoft MIDI API
因此,我与 Microsoft 进行了 Premier Support Call
经过长时间的调查(四个月),Microsoft 确认这是 Microsoft WinMM API 实现中的缺陷,“...无法正确处理 PNP 删除...”

我被告知将在 RS5 时间范围内发布对此的修复。


11 个月后...
作为处理我的 Premier Support Call 的一部分,Microsoft 发布了 public KB article 来描述这个问题.

【讨论】:

  • 好后续!
  • 微软有什么进一步的更新吗?在 Win10 上使用 Mixxx DJ 软件时,我看到同样的死锁,它也使用 portmidi。
  • @jorenl AFAIK 微软尚未修复 MIDI API 实现。 Microsoft 代表建议我,为了解决这个问题,我需要将 WINRT API 替换为 MIDI。请注意,WINRT API for MIDI 要求您使用 Visual-Studio 2017 或更高版本,这需要 Windows-10。
猜你喜欢
  • 2021-12-18
  • 2018-05-11
  • 1970-01-01
  • 2019-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-29
  • 1970-01-01
相关资源
最近更新 更多