如何使程序运行时暂停?按任意键或特定键继续!谢谢各位老兄!(请举例)

解决方案 »

  1.   

    procedure wait(tick:DWORD);
    var
      t:DWORD;
    begin
      t:=GetTickCount;
      while GetTickCount-t<tick do
        Application.ProcessMessages;
    end;
    这个可以暂停的同时做消息处理,但不是真正的完全暂停,只是暂时停掉调用它的函数的执行
      

  2.   

    Application.ProcessMessages 是使程序有反应键盘的能力,不能暂停程序的
      

  3.   

    sleep的话怎么接受键盘消息呢?
      

  4.   

    getchar()
    std::cin>>bb;
      

  5.   

    汗,这里好像是delphi区
    就算用getchar(),其实就是readln,也只能在命令行程序中暂停
      

  6.   

    我给你个思路,我们来模拟这样的场景:界面上有一个进度条,开始时,你按下SPACE键进度条每隔一秒前进一段,在其前进的过程中你可以再次按下SPACE键中断程序。然后在你想重新开始时按下SPACE继续。我想你所谓的程序暂停应该是呈现给用户的程序暂停而不应该是整个程序的暂停,那有什么意义,用户并不关心内部的实现。
    有了这个思路,我们自然想到了OnKeyUp事件,判断伪码:
    if key = VK_SPACE then GotoProgressBar;
    GotoProgressBar过程就是用来实现暂停与继续效果的。在一个过程中要实现切换操作,我们必须有一个表示当前状态的布尔型变量比如ProgressStatus,它应该是一个私有字段,并且在程序的OnCreate事件中我们将其初始化为True。
    下面基础的工作准备好后,我们的着力点就在GotoProgressBar过程上。为了每次按键都能从上次的状态或位置开始,我们必须定义一个作用域为过程而生命周期为整个程序周期的并且是可赋值的常量(打开编译器指令{$J}),下面是粗略的伪码,希望你能看懂。
    procedure TFormTest.GotoProgress;
    const
      Percent : Double = 0;
    begin
      ProgressStatus :=  not ProgressStatus;
      while Percent <= 0.9 do
      begin
        if ProgressStatus then exit;
        Sleep(1000);
        Percent := Percent + 0.1;
        self.ProgressBar1.Position :=Trunc(Percent * self.ProgressBar1.Max);
        Application.ProgressMessages;
        //表示处理消息队列,因为在进度条运行的同时,用户可以暂停,这样就使
        //ProgressStatus值发生改变,如果为真,将退出过程,实现暂停
      end;
      ProgressStatus := True; //当进度完成100%,将状态置真
      Percent := 0;           //当进度完成100%,下次将从0位置重新运行
    end;
      

  7.   

    呵,显示一个提示窗口,showModal,真到用户关闭,不是可以了吗?