栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

以高分辨率间隔/计时器引发事件

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

以高分辨率间隔/计时器引发事件

使用多媒体计时器应该可以为您每秒带来约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 );

在运行它们后,请停止它们。它们在您的系统上非常繁重*。捕获所有异常,不要让它们逃离事件处理程序。

*启动超过5个计时器将严重降低大多数系统的速度!在事件处理程序中执行尽可能少的代码,并确保执行的代码快于1毫秒,否则会遇到严重的问题。我每隔10至50个滴答声启动一个代表,以增加标签显示。

发生在a上的普通线程切换

Thread.Sleep
将使您的代码中没有一个线程插槽,大约需要40毫秒。您还可以通过一些NT内核调用来增加线程切换频率,但是请不要这样做。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/394100.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号