只是想实现delay的功能,用settimer很烦的,还要定义callback timeproc我的原意是想让程序执行到此,停顿个几秒钟,但又找不到dalay()函数 (以前用惯了),只有用这个看上去差不多的sleep(),但发现有上述问题, 有哪位大虾能帮我解决一下?

解决方案 »

  1.   

    DWORD begintime=GetTickCount();
    do
    {
      MSG        msg;
      if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
      {
        TranslateMessage(&msg);// Translates virtual key codes
        DispatchMessage(&msg); // Dispatches message to window
      }
    }while(GetTickCount()<begintime+2000);//2秒=2000毫秒
      

  2.   

    beni, sorry我不能完全理解你的代码,不过从样式看你是在消息循环中进行延迟,与我的理解有一些差异,我也不希望一个延迟就对系统效率造成太大影响,这也是我不用settimer的原因,我总认为杀鸡焉用牛刀,在标准c库中的一个delay就没有好的windows代用品吗? 这是我的疑惑,谢谢你的解答,也欢迎继续讨论。
      

  3.   

    回复人: beni() (2001-8-30 15:37:17)  得0分 
    DWORD begintime=GetTickCount();
    do
    {
      MSG        msg;
      if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
      {
        TranslateMessage(&msg);// Translates virtual key codes
        DispatchMessage(&msg); // Dispatches message to window
      }
    }while(GetTickCount()<begintime+2000);//2秒=2000毫秒 
      

  4.   

    Sleep()函数就是delay
    它是将当前线程挂起
    因为以前没有wnd窗口时,你delay一下看不出什么
    (而且dos下面只能有一个进程)
    而现在MoveWindow之后,必须有足够的时间将刷新的消息传给windows,
    所以你马上用Sleep()就会出现你说的情况
    在这种情况下我一向用自己定义的delay函数,就是上面我回复的
    它既可以阻止当前线程的运行,
    又不耽误其它windows消息的传递
      

  5.   

    在 MoveWindow之后使用 UpdateWindow就可以了.然后再用Sleep
      

  6.   

    多谢两位,特别是beni()的帮助。问题解决