我用Thread.sleep(2000),要暂停程序2秒钟,可是我发现暂停的时间根本没有2秒,有的时候很快就到了。我把时间设置大点,如5000毫秒,还是一样的。这是怎么回事?如精确的控制暂停的时间呢?

解决方案 »

  1.   


    我的代码是模拟鼠标和键盘输入的,理想的是每模拟一次输入,都暂停个几秒,等界面变化后,在进行下次模拟输入//点击再次群发
                SetCursorPos(200, 800);
                mouse_event(MouseEventFlag.LeftDown | MouseEventFlag.LeftUp, 0, 0, 0, UIntPtr.Zero);
                
                //全选按钮
                SetCursorPos(420, 85);
                mouse_event(MouseEventFlag.LeftDown | MouseEventFlag.LeftUp, 0, 0, 0, UIntPtr.Zero);
                Thread.Sleep(2000);
                //下一步按钮
                SetCursorPos(250, 800);
                mouse_event(MouseEventFlag.LeftDown | MouseEventFlag.LeftUp, 0, 0, 0, UIntPtr.Zero);
                Thread.Sleep(2000);
                //点击输入框
                SetCursorPos(150, 800);
                mouse_event(MouseEventFlag.LeftDown | MouseEventFlag.LeftUp, 0, 0, 0, UIntPtr.Zero);
                Thread.Sleep(1000);
      

  2.   


    但是发现,每次模拟输入完了之后,等待的时间并不是sleep里面的时间,就这造成了,界面还没有变化,就开始下一次模拟输入了。我改了时间,但是效果不明显
      

  3.   


    这个不是阻塞调用它的父线程,直到线程结束才返回父线程嘛?
    是的,我想知道对你的程序有效吗?我试了下,和sleep的效果差不多,但是我发现了一个奇怪的现象for (int i = 0; i < 2; i++)
                {
                    Thread.Sleep(3000);
                    SetCursorPos(50, 100);
                    mouse_event(MouseEventFlag.LeftDown | MouseEventFlag.LeftUp, 0, 0, 0, UIntPtr.Zero);
                    //Thread.Sleep(3000);
                }
    这个代码我是要点击三次,每次点击之间暂停3000毫秒,假如我把sleep放在mouse_event后面,时间久不太准备,而且,经常出现只点击了两下的情况。但是我无意中把sleep放到了循环的开头哪里,就是上面的代码,发现时间就准确多了,最关键的是每次运行都是点击了三次。不知道怎么回事,发现一旦用了线程之后奇怪的事情很多
      

  4.   


    这个不是阻塞调用它的父线程,直到线程结束才返回父线程嘛?
    是的,我想知道对你的程序有效吗?我试了下,和sleep的效果差不多,但是我发现了一个奇怪的现象for (int i = 0; i < 3; i++)
                {
                    Thread.Sleep(3000);
                    SetCursorPos(50, 100);
                    mouse_event(MouseEventFlag.LeftDown | MouseEventFlag.LeftUp, 0, 0, 0, UIntPtr.Zero);
                    //Thread.Sleep(3000);
                }
    这个代码我是要点击三次,每次点击之间暂停3000毫秒,假如我把sleep放在mouse_event后面,时间久不太准备,而且,经常出现只点击了两下的情况。但是我无意中把sleep放到了循环的开头哪里,就是上面的代码,发现时间就准确多了,最关键的是每次运行都是点击了三次。不知道怎么回事,发现一旦用了线程之后奇怪的事情很多错了,刚才敲错了,i=3,不是等于2。问题还是那样,sleep前后顺序影响了点击的次数和时间不对劲
      

  5.   

    lz看看这个帖子:What Thread sleep method is most precise: Monitor.Wait vs System.Timer vs DispatchTimer vs Threading.Timer
    http://stackoverflow.com/questions/10609718/what-thread-sleep-method-is-most-precise-monitor-wait-vs-system-timer-vs-dispatHow accurate is Thread.Sleep(TimeSpan)?
    http://stackoverflow.com/questions/1303667/how-accurate-is-thread-sleeptimespan