我使用以下代码导入“winmm.dll”。导入DLL并在单声道下运行应用程序
MyUtils = public static class
private
protected
public
[DllImport("winmm.dll")]
class method timeBeginPeriod(period:Integer):Integer; external;
[DllImport("winmm.dll")]
class method timeEndPeriod(period:Integer):Integer; external;
end;
访问方法如下。
MyUtils.timeBeginPeriod(1); //within winform load event
MyUtils.timeEndPeriod(1); //within winform formclosing event
在Windows 7下,它的工作效果非常好。在Linux系统的单声道下,它工作得很好,但有一个例外。一旦程序启动,它就会弹出一个消息框,其中包含导入的dll的名称和OK按钮,如下所示。当我点击确定按钮时,我的程序继续按预期运行,没有任何错误。
我已经通过我的程序梳理,看看我故意在任何地方显示的dll文件名,但我根本就看不到这样的事情。
编辑:多一点信息,我需要WINMM.DLL是我需要能够调整线程睡眠粒度或默认延迟降低到约1毫秒或接近它的工作的原因 - 不来播放电影或音乐文件。我能够调整的唯一方法是通过这些方法timeBeginPeriod
和timeEndPeriod
。这样我的程序就可以通过串口成功通话。我的计划是每隔几毫秒24/7/365天不停地来回讲话。沟通率达到90%以上是至关重要的。导入dll文件后,我的程序通信在windows和linux上完美无瑕,除非我在单声道下在Linux上获得令人讨厌的消息框。
我从来没有见过或听说过这样的问题。有人为什么?
谢谢,
安德鲁Finnell,我知道你在说什么。但是,我的程序确实有效,这些方法似乎按预期工作。对于串行通信,我无法获得低于10ms的Thread.sleep粒度。一旦我能够完成上述任务,串行通信就完美无瑕,或者除了上述问题之外,在Windows和Linux上100%都是稳定的,在我无法获得任何良好沟通之前。我会研究你的建议。 – ThN
我希望人们实际上会提供更多的信息,而不仅仅是继续提供这个答案,这个答案目前并没有真正帮助我。我需要将Thread.Sleep延迟尽可能地缩短到实际的时间延迟。有没有办法与System.Media.SoundPlayer或LAME做到这一点? – ThN
@digitalanalog更新答案,能够解释为什么你没有得到有关使用的Thread.sleep精确到毫秒 –