关于c#中timer的使用,求助

gotopower 2009-12-10 04:26:00
小弟在写一个程序,该程序有三个功能模块,每个功能模块都需要每10秒钟执行一次,准备用timer进行定时触发,现在问题是,我应该1.用一个timer,把三个功能模块都放在一个事件中触发?
2.用一个timer,把三个功能模块放在三个不同的事件里,让timer每次触发三个不同的事件?
3.用三个timer,每个timer触发一个事件?
请问我应该用哪种方法,用这三种方法,事件被放入消息队列的顺序是一样的吗?
新手求助!
...全文
395 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
grzx2210 2009-12-10
  • 打赏
  • 举报
回复
多线程
tianliang1 2009-12-10
  • 打赏
  • 举报
回复
感觉用多线程来处理要好些
daixiang 2009-12-10
  • 打赏
  • 举报
回复
为什么要用timer呢
线程多好的
yymycabbage 2009-12-10
  • 打赏
  • 举报
回复
看关联性吧,如果是要并行的话还要使用线程
gotopower 2009-12-10
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 yuanhuiqiao 的回复:]
补充一下,System.Windows.Forms.Timer是单线程计时器,跟其他两种Timer不太一样,需要注意
[/Quote]
多谢,如果用一个timer,把三个功能模块放在三个不同的事件里,让timer每次触发三个不同的事件,这样3个事件是顺次排队执行还是在3个子线程中执行呢?
yuanhuiqiao 2009-12-10
  • 打赏
  • 举报
回复
补充一下,System.Windows.Forms.Timer是单线程计时器,跟其他两种Timer不太一样,需要注意
gotopower 2009-12-10
  • 打赏
  • 举报
回复
你是说前一次未执行完的事件和到点后新触发的事件在两个线程里执行吧,上锁是不是保护自己占有的资源、变量什么的不被另一个线程中的事件修改、更新吗?
[Quote=引用 6 楼 zhulinxiaofeng 的回复:]
看你用的什么Timer了,如果你用的线程定时器system.times.timer,这个是不排队的,到了你的间隔时间系统会启动一个新的线程来执行你的timer注册的方法。
如果你用的是界面定时器,就是组件中的那个,就是排队执行的。
线程定时器,记得要上锁。
[/Quote]
yuanhuiqiao 2009-12-10
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 gotopower 的回复:]
三个模块加起来运行事件不超过10秒,模块之间没有公用的资源。
又有个新问题:如果我一个事件的执行事件超过了10秒,此时timer会中断我的事件,执行下一个事件还是将后续事件排队,等待此次事件执行完?
引用 1 楼 longhair9711 的回复:
首先要看你的每个模块功能是不是有什么关联,然后看每个模块运行的时间是多长。

若很短的话建议用一个timer

若没有关联运行时间又长的话就用三个timer吧

[/Quote]
不中断,后续还是得执行,下一次事件照常开始。
zhulinxiaofeng 2009-12-10
  • 打赏
  • 举报
回复
看你用的什么Timer了,如果你用的线程定时器system.times.timer,这个是不排队的,到了你的间隔时间系统会启动一个新的线程来执行你的timer注册的方法。
如果你用的是界面定时器,就是组件中的那个,就是排队执行的。
线程定时器,记得要上锁。
wl_ldy 2009-12-10
  • 打赏
  • 举报
回复
学习。。。
gotopower 2009-12-10
  • 打赏
  • 举报
回复
三个模块加起来运行事件不超过10秒,模块之间没有公用的资源。
又有个新问题:如果我一个事件的执行事件超过了10秒,此时timer会中断我的事件,执行下一个事件还是将后续事件排队,等待此次事件执行完?
[Quote=引用 1 楼 longhair9711 的回复:]
首先要看你的每个模块功能是不是有什么关联,然后看每个模块运行的时间是多长。

若很短的话建议用一个timer

若没有关联运行时间又长的话就用三个timer吧
[/Quote]
andyalex 2009-12-10
  • 打赏
  • 举报
回复
看你需要了,
每个模块不需要特定更新,就用1个timer方便
如果用3个timer也可以,这要考虑3个模块是否有共用的资源,考虑同步问题,
weiwuchong 2009-12-10
  • 打赏
  • 举报
回复
学习ing
longhair9711 2009-12-10
  • 打赏
  • 举报
回复
首先要看你的每个模块功能是不是有什么关联,然后看每个模块运行的时间是多长。

若很短的话建议用一个timer

若没有关联运行时间又长的话就用三个timer吧

110,539

社区成员

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

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

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