3 回答

TA貢獻1873條經(jīng)驗 獲得超9個贊
使用多媒體計時器應該可以為您每秒帶來約1000個事件。此代碼應在途中為您提供幫助。
public delegate void TimerEventHandler(UInt32 id, UInt32 msg, ref UInt32 userCtx, UInt32 rsv1, UInt32 rsv2);
/// <summary>
/// A multi media timer with millisecond precision
/// </summary>
/// <param name="msDelay">One event every msDelay milliseconds</param>
/// <param name="msResolution">Timer precision indication (lower value is more precise but resource unfriendly)</param>
/// <param name="handler">delegate to start</param>
/// <param name="userCtx">callBack data </param>
/// <param name="eventType">one event or multiple events</param>
/// <remarks>Dont forget to call timeKillEvent!</remarks>
/// <returns>0 on failure or any other value as a timer id to use for timeKillEvent</returns>
[DllImport("winmm.dll", SetLastError = true,EntryPoint="timeSetEvent")]
static extern UInt32 timeSetEvent(UInt32 msDelay, UInt32 msResolution, TimerEventHandler handler, ref UInt32 userCtx, UInt32 eventType);
/// <summary>
/// The multi media timer stop function
/// </summary>
/// <param name="uTimerID">timer id from timeSetEvent</param>
/// <remarks>This function stops the timer</remarks>
[DllImport("winmm.dll", SetLastError = true)]
static extern void timeKillEvent( UInt32 uTimerID );
運行它們后,請停止它們。它們在您的系統(tǒng)上非常繁重*。捕獲所有異常,不要讓它們逃離事件處理程序。
*啟動超過5個計時器將嚴重降低大多數(shù)系統(tǒng)的速度!在事件處理程序中執(zhí)行盡可能少的代碼,并確保執(zhí)行的代碼快于1毫秒,否則會遇到嚴重的問題。我每隔10至50個滴答聲啟動一個代表,以增加標簽顯示。
發(fā)生在a上的普通線程切換Thread.Sleep將使您的代碼中沒有一個線程插槽,大約需要40毫秒。您還可以通過一些NT內(nèi)核調(diào)用來增加線程切換頻率,但是請不要這樣做。
- 3 回答
- 0 關注
- 604 瀏覽
添加回答
舉報