我使用以下代碼導入「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精確到毫秒 –