我的OnTimer()里面处理的东西太多了,  想开个线程来处理他们不知道这样做是否合理。。就是开了线程能否减轻 OnTimer()的压力。我觉得 OnTimer()好象本身就是另外的线程。请熟悉线程的朋友提供资料。。谢谢。。

解决方案 »

  1.   

    我认为不合理首先WM_TIMER消息一旦设置了定时器之后就每隔一段时间触发
    那也就是说OnTimer()要不断被调用
    即便是用线程来处理OnTimer()中的任务,这样不断创建的线程的回收、控制工作都将是麻烦而不确定的。
    所以在OnTimer()中开多线程并不是好办法
      

  2.   

    恩,那,我OnTimer()中处理的事情太多了,该怎么办??
      机器总是接收用户指令很慢
      

  3.   

    分配给线程处理也行但是你自己必须能控制好它
    当然这个控制不仅控制线程的资源分配、结束等问题
    还有一个问题就是:下次触发WM_TIMER之后,你如何处理已有线程和新分配线程的问题
      

  4.   

    如果可以确定在时间间隔(下次触发WM_TIMER之前)之内,所有线程的任务可以完成
    那你就用线程来处理如果不能,还是好好斟酌一下吧
      

  5.   

    我认为可以采用开另外的线程减轻 OnTimer()的压力,它可以模拟OnTimer()的功能(一个永远执行的线程,用Sleep()函数模拟),在一定程度上可以缓解OnTimer()的压力。即使你的OnTimer()函数的判断周期缩短。虽然在一个时间段内对CPU来说是不变的,但多线程对程序效率的提高是有效的。(不过,我现在还没有通过具体的程序证明)。
      

  6.   

    个人看法,单cpu的情况下,多开一个线程只能增加压力,绝对不会减小压力如果你的OnTimer里面处理的问题太多,导致界面不流畅的话,那么在OnTimer里面开线程也不是不可以
    但是首先一定要保证线程不会多开或者限制线程数目设置一个event,当有线程在执行的时候就置位,event置位的时候就不开下一个线程或者做个线程pool管理多个线程
      

  7.   

    我现在做的是一个测试系统,其中给硬件发送信号时要解决的问题和你所说的问题差不多。因为信号是要求连续不断的发的,所以我就单独开辟了一个线程对它进行调用,运行的时候出现一个问题就是只要程序再处理其他的事情,发送就会终止。原来是线程太占CPU时间。我仔细研究了一下发送的函数,发现是其中的收发数据的函数很是浪费时间,而传送进程的速度是很快的,所以我就在发送的循环中设置一个标志符nFlag,初始值为FALSE,等到数据全部发送完毕后将它置为TRUE,否则回头继续循环。然后在执行TRANSFER进程,问题就差不多解决了,虽然没有完全解决,但这也是一个方法。