我写了个程序,有一个无限循环会做一件事,做完之后Sleep(1000L),可我发现程序执行之后,就不能动了,现在发现事sleep执行时,程序时不会有响应的,我该怎么修改呢!

解决方案 »

  1.   

    Sleep是挂起当前线程,如果是主线程,则挂起Windows所有消息,感觉象死了一样
      

  2.   

    对sleep执行时进程就不处理任何消息了,如果需要的话建议你用多线程就可以解决了,sleep你可以减小延时,改成80就行了
      

  3.   

    对sleep执行时进程就不处理任何消息了,如果需要的话建议你用多线程就可以解决了,sleep你可以减小延时,改成80就行了
    -----------------------------------我得纠正一下,对sleep执行时进程就不处理任何消息了,只对主线程是这样,如果你另外开线程,在非主线程则进程仍可处理消息(实际上是由主线程处理)
      

  4.   

    如果是单线程的就没有必要作sleep啊。
      

  5.   

    使用sleep函数的不利只处在于期间不能处理其他的消息,如果时间太长,就好象死机一样,利用ColeDateTime类和ColeDateTimeSpan类实现延时:  
    ColeDateTime  start_time  =  ColeDateTime::GetCurrentTime();  
    ColeDateTimeSpan  end_time  =  ColeDateTime::GetCurrentTime()-start_time;  
    While(end_time.GetTotalSeconds()  <=  2)  
    {  
       MSG  msg;  
       GetMessage(&msg,NULL,0,0);  
       PreTranslateMessage(&msg);  
       End_time  =  ColeDateTime::GetCurrentTime-start_time;  
    }  
    这样在延时的时候我们也能够处理其他的消息。
      

  6.   

    使用sleep函数的不利只处在于期间不能处理其他的消息,如果时间太长,就好象死机一样,利用ColeDateTime类和ColeDateTimeSpan类实现延时:  
    ColeDateTime  start_time  =  ColeDateTime::GetCurrentTime();  
    ColeDateTimeSpan  end_time  =  ColeDateTime::GetCurrentTime()-start_time;  
    While(end_time.GetTotalSeconds()  <=  2)  
    {  
       MSG  msg;  
       GetMessage(&msg,NULL,0,0);  
       PreTranslateMessage(&msg);  
       End_time  =  ColeDateTime::GetCurrentTime-start_time;  
    }  
    这样在延时的时候我们也能够处理其他的消息。--------------------------------------------
    这样可以处理消息,不过循环太厉害了,占cpu太多,所以必要时候,还得加Sleep(50)
    这样比较好While(end_time.GetTotalSeconds()  <=  2)  
    {  
       MSG  msg;  
       GetMessage(&msg,NULL,0,0);  
       PreTranslateMessage(&msg); 
       Sleep(50);
       End_time  =  ColeDateTime::GetCurrentTime-start_time;  
    } 不会太消耗Cpu
      

  7.   

    对于这种问题用SetTimer(1,1000,NULL);和OnTimer(UINT nIDEvent)实现比较好。
      

  8.   

    我也考虑要用SetTimer和OnTimer,由于循环的复杂关系,暂时还没解决!
      

  9.   

    我写了个程序,有一个无限循环会做一件事,做完之后Sleep(1000L),可我发现程序执行之后,就不能动了,现在发现事sleep执行时,程序时不会有响应的,我该怎么修改呢!
    =================================================================================
    开个线程来处理
      

  10.   

    sleep函数最好不要用在循环中,比如for,while,这样很容易 无法响应
    可以使用定时器。
      

  11.   

    sleep函数最好不要用在循环中,比如for,while,这样很容易 无法响应
    可以使用定时器。
    -------------------------------->
    定时有时候是无法替代Sleep的比方在主线程中间有一段代码必须停下来等待某一件事件等到事件往下执行,不用循环等待,你用定时会非常麻烦,程序也会很乱。况且定时经过测试也是不安全的,系统忙的时候,定时消息会丢失。(主线程挂起后,定时消息会丢失,只恢复最后一个定时)
      

  12.   

    Featured(我握着爱情的门票静静排队……) 楼主,你应该不尴尬了,上面的朋友把代码给你了,你自己适当加个小Sleep,就可以了呀