见题。
我写了一个汗诺塔程序,当方块移动的时候,我想让鼠标控制他的移动,就是鼠标按一下,他自己按递归程序的进度走一次,怎么实现?注意:我的是单进程

解决方案 »

  1.   

    上次看到过您的贴子100分呢。
    有个函数叫WaitForSingleObject(),是进程同步用的。应该可以达到目标。
      

  2.   

    void COhniiView::OnRButtonUp(UINT nFlags, CPoint point) 
    {
    CDC* pDC=GetDC();
    f(n,s[0],s[1],s[2],pDC);
    CView::OnRButtonUp(nFlags, point);
    }void COhniiView::f(int nn,Stock& x,Stock& y,Stock& z,CDC* pDC)
    {
    if(nn>0) {
    f(nn-1,x,z,y,pDC);
    x.move(y,pDC);
    f(nn-1,z,y,x,pDC);
    }
    };
    怎么改动可以一步一步执行
      

  3.   

    程序可读性有点差呀:(n,s[0],s[1],s[2],都是啥呀?
      

  4.   

    又不叫你读,我是问如何在递归程序的中间设置等待其他消息的方法。
    void COhniiView::f(int nn,Stock& x,Stock& y,Stock& z,CDC* pDC)
    {
    if(nn>0) {
    f(nn-1,x,z,y,pDC);
                               //等待其他键按下
    x.move(y,pDC);
    f(nn-1,z,y,x,pDC);
    }
    };
      

  5.   

    呵呵,用得着多线程同步吗?============================================================================
    http://www.betajin.com/alphasun/index.htm           给我发信息请附带原帖地址
    http://alphasun.18en.com/                    http://shakingtoolkit.9126.com/
    DocWizard C++程序文档自动生成工具 | Wave OpenGL | HttpProxy | AjaxParser词法分析
      

  6.   

    不太懂你的意思,不过你要等待消息的方法我倒是有!
       while()
    {
    GetMessage(msg,NULL,NULL,NULL);
            if(msg->message == WM_LBUTTONDOWN )
    {
        m_pSplashWnd->HideSplashScreen();
            
        break;
    }
    }
      

  7.   

    设一个bool值 变量,m_bRun;
    改变这个值就可以控制了
    这函数最好在另外一个线程中
    void COhniiView::f(int nn,Stock& x,Stock& y,Stock& z,CDC* pDC)
    {
    if(nn>0) {
    f(nn-1,x,z,y,pDC);
                                while(!m_bRun)
                                 {}
                               //等待其他键按下
    x.move(y,pDC);
    f(nn-1,z,y,x,pDC);
    }
    };
      

  8.   

    那样的无限循环会把整个CPU占满,怎么还会给其他程序执行的时间