我需要用MFC做一个对话框,从一个文件夹里读取所有的图片,然后把图片一张一张的显示出来,每张显示100ms。 有现在用的是sleep(100)。 我想我也可以用设置一个timer来解决这个问题, SetTimer(1,100,NULL). 这两种方法哪个更好呢?请高手们赐教。。

解决方案 »

  1.   

    如果在主线程中sleep的话窗口会假死的
      

  2.   

    sleep那是代表该线程自动放弃一段时间的时间片(在windows中,每个时间片时20ms),所以说楼主上面的
    sleep(100)代表该线程放弃100ms的时间片。这听上去不错,但实际上线程能否获得时间片依旧是个问题(这个进程和线程的优先级有关系),所以说楼主这个Sleep(100)实在有些保险,搞不好就sleep forever了。
    而timer则是硬件中断(误差应该在ms之内),依照楼主的情况,个人还是建议用SetTimer了。
      

  3.   

    我定义另外一个对话框CDlgShow m_show;
    然后再主对话框里 OnClickedStart()里面 叫m_show.ShowJPG(...) 程序运行正常。 
    您是说用timer会更好吗?
      

  4.   

    当然timer更好。当然sleep(100)也没问题,原因是100对人的感官没那么快,但sleep(100)就意味着你的主线程挂起100ms了,啥也不相应了!
      

  5.   

    线程中sleep应该更好吧。
      

  6.   

    一张显示100ms?你搞动画片啊?
    用sleep(100),你的窗口按钮什么的都用不了了哦,不过很快,你估计感觉不出来
      

  7.   

    我觉得差不多吧,用sleep的话就要自己再开个线程,用settimer的话呢,该WM_TIMER消息首先是个低优先级的,其次100ms的频率得不得保证一般是大约55ms的整数倍,这样响应的时间不一定正确
      

  8.   


    我是要做一个实验,测人看到熟悉的照片脑电波变化。每张照片显示100ms。 我现在用的是settimer。 谢谢个位大侠的帮助呀。。小弟刚入门,请多多关照,哈哈。。大家假期快乐。。
      

  9.   

    timer好,语义上就是定时触发切换照片的事件,用sleep不好
      

  10.   

    用定时器更好,因为定时器相当于多线程,在时间点没触发的其他时间可以执行主线程,如果sleep是挂起线程,如果sleep在主线程里,会造成程序挂起,是程序死掉。
      

  11.   

    建议用timer
    sleep会假死,用户点不了按钮就不好了吧~