求一个timer 延迟解决方案------------------------------------解决给高分

shan7719515 2014-01-04 11:27:13
假设有一个事件需要10秒后执行

在时间刚过去5秒的时候,还要再执行此事件,也是10秒后执行


请问此类延迟问题应该怎么解决才不冲突



注:有多个需要延迟执行的事件.
...全文
427 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
liqiucu 2014-01-09
  • 打赏
  • 举报
回复
引用 20 楼 shan7719515 的回复:
[quote=引用 17 楼 liqiucu 的回复:] 搂主的问题 是不是 当某个timer还没执行完 下一个继续进来执行?会有这种情况的,用了timer其实就是多线程了,用sleep解决不了的,必须对有冲突的objet进行lock。
是的,求正解[/quote] 从你的表达里可以看出你的处理方法里有冲突object,用下面代码试试看: timer Elapsed 事件处理方法里加lock private object obj = new object(); private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { lock (obj) { //your code } }
leafmao 2014-01-09
  • 打赏
  • 举报
回复
“假设有一个事件需要10秒后执行 在时间刚过去5秒的时候,还要再执行此事件,也是10秒后执行” 不知道楼主这个5秒是随便举的例子还是有规律性的,每次都是第5秒的时候需要延时10秒触发下一次事件?
feiniao19830822 2014-01-09
  • 打赏
  • 举报
回复
每次触发事件时就启动一个线程,在线程中先sleep 10秒。 如果线程中某些处理需要互斥访问就加lock。

        //5秒定时触发事件
        private void timer1_Tick(object sender, EventArgs e)
        {
            DoEvent();
        }

        //手工点击触发事件
        private void button1_Click(object sender, EventArgs e)
        {
            DoEvent();
        }

        private void DoEvent()
        {
            //开启线程
            Thread thread = new Thread(DoSomeThing);
            thread.Start();
            //使用线程池
            //ThreadPool.QueueUserWorkItem(new WaitCallback(DoSomeThing2));
        }
        private void DoSomeThing()
        {
            Thread.Sleep(10000);
            //实际处理
        }
本拉灯 2014-01-09
  • 打赏
  • 举报
回复
引用 21 楼 shan7719515 的回复:
[quote=引用 19 楼 wyd1520 的回复:] [quote=引用 16 楼 shan7719515 的回复:] [quote=引用 10 楼 wyd1520 的回复:] [quote=引用 楼主 shan7719515 的回复:] 假设有一个事件需要10秒后执行 在时间刚过去5秒的时候,还要再执行此事件,也是10秒后执行 请问此类延迟问题应该怎么解决才不冲突 注:有多个需要延迟执行的事件.
我喜欢妹子,妹子你把问题 再理清楚一下。最好举个列子。 是说每隔10秒必需执行,还是说 执行后再等10秒(就是包含执行等待的时间)才执行下一次[/quote] 只要触发事件都需要延迟10秒执行 但是我有可能每5秒触发一次这个事件,不知道说的明白不 [/quote] 每5秒触发一次,然后每次从触发的那个时间起延迟10秒去执行这次触发的动作,相当于我现在5秒到了等10秒后执行这个动作是这样子?[/quote] 是17楼的意思,第一个timer还没完成,第二个有触发了[/quote] 你的意思是让第一个还没执行完,要是时间到了不让第二个触发是这样子吧,直到第一个执行完后,才重新开始计时下个10秒是这样子?
shan7719515 2014-01-09
  • 打赏
  • 举报
回复
引用 19 楼 wyd1520 的回复:
[quote=引用 16 楼 shan7719515 的回复:] [quote=引用 10 楼 wyd1520 的回复:] [quote=引用 楼主 shan7719515 的回复:] 假设有一个事件需要10秒后执行 在时间刚过去5秒的时候,还要再执行此事件,也是10秒后执行 请问此类延迟问题应该怎么解决才不冲突 注:有多个需要延迟执行的事件.
我喜欢妹子,妹子你把问题 再理清楚一下。最好举个列子。 是说每隔10秒必需执行,还是说 执行后再等10秒(就是包含执行等待的时间)才执行下一次[/quote] 只要触发事件都需要延迟10秒执行 但是我有可能每5秒触发一次这个事件,不知道说的明白不 [/quote] 每5秒触发一次,然后每次从触发的那个时间起延迟10秒去执行这次触发的动作,相当于我现在5秒到了等10秒后执行这个动作是这样子?[/quote] 是17楼的意思,第一个timer还没完成,第二个有触发了
shan7719515 2014-01-09
  • 打赏
  • 举报
回复
引用 17 楼 liqiucu 的回复:
搂主的问题 是不是 当某个timer还没执行完 下一个继续进来执行?会有这种情况的,用了timer其实就是多线程了,用sleep解决不了的,必须对有冲突的objet进行lock。
是的,求正解
失落的神庙 2014-01-06
  • 打赏
  • 举报
回复
延迟10秒的所谓的事件或者方法 弄成一个方法去触发或者执行 然后用线程 开启
本拉灯 2014-01-06
  • 打赏
  • 举报
回复
引用 16 楼 shan7719515 的回复:
[quote=引用 10 楼 wyd1520 的回复:] [quote=引用 楼主 shan7719515 的回复:] 假设有一个事件需要10秒后执行 在时间刚过去5秒的时候,还要再执行此事件,也是10秒后执行 请问此类延迟问题应该怎么解决才不冲突 注:有多个需要延迟执行的事件.
我喜欢妹子,妹子你把问题 再理清楚一下。最好举个列子。 是说每隔10秒必需执行,还是说 执行后再等10秒(就是包含执行等待的时间)才执行下一次[/quote] 只要触发事件都需要延迟10秒执行 但是我有可能每5秒触发一次这个事件,不知道说的明白不 [/quote] 每5秒触发一次,然后每次从触发的那个时间起延迟10秒去执行这次触发的动作,相当于我现在5秒到了等10秒后执行这个动作是这样子?
liqiucu 2014-01-06
  • 打赏
  • 举报
回复
引用 16 楼 shan7719515 的回复:
[quote=引用 10 楼 wyd1520 的回复:] [quote=引用 楼主 shan7719515 的回复:] 假设有一个事件需要10秒后执行 在时间刚过去5秒的时候,还要再执行此事件,也是10秒后执行 请问此类延迟问题应该怎么解决才不冲突 注:有多个需要延迟执行的事件.
我喜欢妹子,妹子你把问题 再理清楚一下。最好举个列子。 是说每隔10秒必需执行,还是说 执行后再等10秒(就是包含执行等待的时间)才执行下一次[/quote] 只要触发事件都需要延迟10秒执行 但是我有可能每5秒触发一次这个事件,不知道说的明白不 [/quote] 你加延迟的目的是什么?如果你设置了每5秒执行一次timer,不管你代码里面sleep了几秒,下一个timer 会在5秒的时候继续开出来,你要解决的是什么问题?
liqiucu 2014-01-06
  • 打赏
  • 举报
回复
搂主的问题 是不是 当某个timer还没执行完 下一个继续进来执行?会有这种情况的,用了timer其实就是多线程了,用sleep解决不了的,必须对有冲突的objet进行lock。
shan7719515 2014-01-06
  • 打赏
  • 举报
回复
引用 10 楼 wyd1520 的回复:
[quote=引用 楼主 shan7719515 的回复:] 假设有一个事件需要10秒后执行 在时间刚过去5秒的时候,还要再执行此事件,也是10秒后执行 请问此类延迟问题应该怎么解决才不冲突 注:有多个需要延迟执行的事件.
我喜欢妹子,妹子你把问题 再理清楚一下。最好举个列子。 是说每隔10秒必需执行,还是说 执行后再等10秒(就是包含执行等待的时间)才执行下一次[/quote] 只要触发事件都需要延迟10秒执行 但是我有可能每5秒触发一次这个事件,不知道说的明白不
凤凰涅檠 2014-01-06
  • 打赏
  • 举报
回复
这样么:timer.enable= false;你的业务逻辑;Thread.Sleep(10000);timer.enable= true;
  • 打赏
  • 举报
回复
感觉本质上就是程序启动10秒钟之后,每隔5秒执行一次Action呀。
  • 打赏
  • 举报
回复
比如说,你可以在事件处理方法中写
var dt = DateTime.Now;
if(dt >= t1)
    干一件事();
if(dt >= t2)
    干另一件事();
}
稍微想想逻辑。
  • 打赏
  • 举报
回复
你的Timer的Interval应该设置为5秒。至于几点该执行什么动作,这不要在Timer触发的事件处理中简单写,而应该在事件处理过程中判断。
wind_cloud2011 2014-01-04
  • 打赏
  • 举报
回复
http://www.cnblogs.com/OpenCoder/archive/2010/02/23/1672043.html http://blog.sina.com.cn/s/blog_4fb0c1e90100mbxz.html
Regan-lin 2014-01-04
  • 打赏
  • 举报
回复
用进程的sleep不可以么?
十八道胡同 2014-01-04
  • 打赏
  • 举报
回复
用多个timer ,当这个事件结束后开启另一个事件的timer.enable= true;
本拉灯 2014-01-04
  • 打赏
  • 举报
回复
引用 楼主 shan7719515 的回复:
假设有一个事件需要10秒后执行 在时间刚过去5秒的时候,还要再执行此事件,也是10秒后执行 请问此类延迟问题应该怎么解决才不冲突 注:有多个需要延迟执行的事件.
我喜欢妹子,妹子你把问题 再理清楚一下。最好举个列子。 是说每隔10秒必需执行,还是说 执行后再等10秒(就是包含执行等待的时间)才执行下一次
黄大仙儿 2014-01-04
  • 打赏
  • 举报
回复
Timer类的timer是自己就开了线程了,如果没有像读写这样需要资源互斥的话,应该不会发生冲突,你的Interval设为5s,在里面再sleep10s
加载更多回复(3)

110,567

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧