我写了一个类,这个类有独立的功能,通过事件与程序交互,但是这个类里有个死循环一直在执行,这样很浪费资源,我想用timer,但如果用timer,那就要把这个类全部放到程序里了,这样代码就会混乱,我不知道怎么弄了,希望各位朋友给提个意见,分别说一下循环与timer的好处与坏处,还有咋么用才能是代码封装的更好,谢谢了~~

解决方案 »

  1.   

    Timer是每隔一段时间执行一下;
    死循环是会一直占用CPU的控制权的。
      

  2.   

    我想把那个类封装起来,因为里面涉及的东西也很多,如果用timer就得直接添加到程序里,那样好吗?
      

  3.   

    用timer不是很好,用线程控制,用线程的休眠,终止
      

  4.   

    把死循环换成线程吗,然后添加睡眠
    for(;;)
    {
     //do you jobs Thread.Sleep(10);//挂起10个毫秒
    }
    这样可以有效的减少cpu消耗
      

  5.   

    死循环一是占用CPU资源,二是如果每次循环都占用内存的话,那么内存的消耗也是很大的。
    如果不想让CPU占用那么多,可以将此循环另开一个线程,每次循环的末尾调用Thread.Sleep()方法,这样CPU占用率不会飙升,但要保证程序退出的时候该线程要终止,否则可能出现窗口消失,但后台线程仍在运行的情况。
    用Timer的话,一共有三种Timer,如果和UI线程无关的话,建议用System.Timers.Timer,虽然和System.Threading.Timer相比耗费了一些资源,但是它在终止定时器方面比System.Threading.Timer要好,至多多执行几次。这两个Timer申请的线程均由ThreadPool来管理。
    这两种方法均可,看你使用哪个,不妨都试试,自己比较一下,找出最优方案,祝你好运!
      

  6.   

    首先你要想想这是否错误安排了职责。一般来说,这类“纠结”的东西应该放到界面层去实现,而小东西只应该敏捷地实现“单步”操作,它只应该被调度而不应该执行调度的重任。例如界面上才防止一个Timer负责轮询调度,这样才能总体协调程序的资源。
    同意。我基本上在class中都是用System.Timers.Timer。
      

  7.   

    通常这种类只要实现一个“GotoNextStep()”方法就可以了,不要自己去搞什么循环。
      

  8.   


    timer放到一个类里,应该如何应用呢,能不能给个简单的例子说明一下~~谢谢了
      

  9.   

    你动手试验一下不好吗,MSDN上对Timer有例子可查。
      

  10.   


    呵呵教训的是呀,我看了下,然后我有个问题,因为我要做的是循环,首先他要有顺序,第一个循环没执行完事不恩那个执行第2个的,用timer的时候我发现,timer事件还没执行完,如果已经到时间,他会接着执行,这样会不会出现第二次执行完成了,而第一次还在执行呢?
      

  11.   

    在timer时间处理函数中让timer.Enable=FALSE,停止timer,处理函数返回前再置为True。继续timer
      

  12.   

    Timer本质上应该也是一个死循环。
    只不过Timer是在后台开了一个线程。个人理解
      

  13.   

    你说的是存在线程之间的同步是吗?建议用ManualResetEvent/AutoResetEvent对象做一下线程同步
      

  14.   


    不是线程 是timer,已经按照18楼的改了
      

  15.   

    s循环+同步事件
     
    自己控制 要么等事件通知eventhandler 要么超时看情况
    用timer,你就不必去理解细节
    要是自己写类似timer的功能,就至少要懂得 线程同步
      

  16.   

    最简单的是 类里面添加一个结束循环的标记就成了 ,用timer去控制这个标记