timer 与死循环 我写了一个类,这个类有独立的功能,通过事件与程序交互,但是这个类里有个死循环一直在执行,这样很浪费资源,我想用timer,但如果用timer,那就要把这个类全部放到程序里了,这样代码就会混乱,我不知道怎么弄了,希望各位朋友给提个意见,分别说一下循环与timer的好处与坏处,还有咋么用才能是代码封装的更好,谢谢了~~ 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Timer是每隔一段时间执行一下;死循环是会一直占用CPU的控制权的。 我想把那个类封装起来,因为里面涉及的东西也很多,如果用timer就得直接添加到程序里,那样好吗? 用timer不是很好,用线程控制,用线程的休眠,终止 把死循环换成线程吗,然后添加睡眠for(;;){ //do you jobs Thread.Sleep(10);//挂起10个毫秒}这样可以有效的减少cpu消耗 死循环一是占用CPU资源,二是如果每次循环都占用内存的话,那么内存的消耗也是很大的。如果不想让CPU占用那么多,可以将此循环另开一个线程,每次循环的末尾调用Thread.Sleep()方法,这样CPU占用率不会飙升,但要保证程序退出的时候该线程要终止,否则可能出现窗口消失,但后台线程仍在运行的情况。用Timer的话,一共有三种Timer,如果和UI线程无关的话,建议用System.Timers.Timer,虽然和System.Threading.Timer相比耗费了一些资源,但是它在终止定时器方面比System.Threading.Timer要好,至多多执行几次。这两个Timer申请的线程均由ThreadPool来管理。这两种方法均可,看你使用哪个,不妨都试试,自己比较一下,找出最优方案,祝你好运! 首先你要想想这是否错误安排了职责。一般来说,这类“纠结”的东西应该放到界面层去实现,而小东西只应该敏捷地实现“单步”操作,它只应该被调度而不应该执行调度的重任。例如界面上才防止一个Timer负责轮询调度,这样才能总体协调程序的资源。同意。我基本上在class中都是用System.Timers.Timer。 通常这种类只要实现一个“GotoNextStep()”方法就可以了,不要自己去搞什么循环。 timer放到一个类里,应该如何应用呢,能不能给个简单的例子说明一下~~谢谢了 你动手试验一下不好吗,MSDN上对Timer有例子可查。 呵呵教训的是呀,我看了下,然后我有个问题,因为我要做的是循环,首先他要有顺序,第一个循环没执行完事不恩那个执行第2个的,用timer的时候我发现,timer事件还没执行完,如果已经到时间,他会接着执行,这样会不会出现第二次执行完成了,而第一次还在执行呢? 在timer时间处理函数中让timer.Enable=FALSE,停止timer,处理函数返回前再置为True。继续timer Timer本质上应该也是一个死循环。只不过Timer是在后台开了一个线程。个人理解 你说的是存在线程之间的同步是吗?建议用ManualResetEvent/AutoResetEvent对象做一下线程同步 不是线程 是timer,已经按照18楼的改了 s循环+同步事件 自己控制 要么等事件通知eventhandler 要么超时看情况用timer,你就不必去理解细节要是自己写类似timer的功能,就至少要懂得 线程同步 最简单的是 类里面添加一个结束循环的标记就成了 ,用timer去控制这个标记 pictureBox控件中的选择的图片如何传到EXCEL中? c# Dataset导出数据到excel的问题? 得到容器上的所有控件的文本 C# 单文档(SDI)与对话框应用程序的区别是什么 sql delete问题 问一个关于循环的问题 由于运算处理量较大,导致窗口处于假死状态,如何解决这样的问题? 请问能不能在安装项目的期间根据用户的输入来改写web.config文件的内容?比如说:数据库连接字符串……谢谢! 在c#中,如何捕獲數據庫返回的錯誤信息。 C#中,哪个函数可以提供以下循环比较功能。 c#中怎么在richtextbox显示pdf,和音频视频文件呀? 第三方控件状态栏的用法
死循环是会一直占用CPU的控制权的。
for(;;)
{
//do you jobs Thread.Sleep(10);//挂起10个毫秒
}
这样可以有效的减少cpu消耗
如果不想让CPU占用那么多,可以将此循环另开一个线程,每次循环的末尾调用Thread.Sleep()方法,这样CPU占用率不会飙升,但要保证程序退出的时候该线程要终止,否则可能出现窗口消失,但后台线程仍在运行的情况。
用Timer的话,一共有三种Timer,如果和UI线程无关的话,建议用System.Timers.Timer,虽然和System.Threading.Timer相比耗费了一些资源,但是它在终止定时器方面比System.Threading.Timer要好,至多多执行几次。这两个Timer申请的线程均由ThreadPool来管理。
这两种方法均可,看你使用哪个,不妨都试试,自己比较一下,找出最优方案,祝你好运!
同意。我基本上在class中都是用System.Timers.Timer。
timer放到一个类里,应该如何应用呢,能不能给个简单的例子说明一下~~谢谢了
呵呵教训的是呀,我看了下,然后我有个问题,因为我要做的是循环,首先他要有顺序,第一个循环没执行完事不恩那个执行第2个的,用timer的时候我发现,timer事件还没执行完,如果已经到时间,他会接着执行,这样会不会出现第二次执行完成了,而第一次还在执行呢?
只不过Timer是在后台开了一个线程。个人理解
不是线程 是timer,已经按照18楼的改了
自己控制 要么等事件通知eventhandler 要么超时看情况
用timer,你就不必去理解细节
要是自己写类似timer的功能,就至少要懂得 线程同步