我有三个函数
int a=0;void mydlg::funtion1()
{
  mydlg::funtion2();
     ..............
    if(a==1)
      {
       AfxMessageBox("a=1");
       }
     else
      {
     AfxMessageBox("a=0");
       }
 }void mydlg::funtion2()
{
....
....
mydlg::funtion3();
.....
.....
}void mydlg::funtion3()
{
...
a=1;
....
}发现有时会出现 弹出 “a=0”,怎么样保证函数funtion3()调用完毕之后才执行
funtion1()中的“
    if(a==1)
      {
       AfxMessageBox("a=1");
       }
     else
      {
     AfxMessageBox("a=0");
       }

解决方案 »

  1.   

    int a=0;void mydlg::funtion1()
    {
      if(mydlg::funtion2())
      {
         ..............
        if(a==1)
          {
           AfxMessageBox("a=1");
           }
         else
          {
         AfxMessageBox("a=0");
           }
       }
     }BOOL mydlg::funtion2()
    {
    ....
    ....
    if(mydlg::funtion3())
    {
    .....
    .....
    return TRUE;
    }
    return FALSE;
    }BOOL mydlg::funtion3()
    {
    ...
    a=1;
    ....
    return TRUE;
    }
      

  2.   

    我发现在“
        if(a==1)
          {
           AfxMessageBox("a=1");
           }
         else
          {
         AfxMessageBox("a=0");
           }

    之前加 AfxMessageBox("ok");就不会有问题,不是函数的其它地方修改了a,而是函数funtion3()还没有调用完毕之前已经执行
    funtion1()中的“
        if(a==1)
          {
           AfxMessageBox("a=1");
           }
         else
          {
         AfxMessageBox("a=0");
           }

      

  3.   

    各位大虾,我把它该为如下,竟然会变成了死循环,请问这是为什么?int a=0;
    int wait =0;void mydlg::funtion1()
    {
      mydlg::funtion2();
         ..............
         wait=2;
    while(a>1)
    {;
    }
        if(a==1)
          {
           AfxMessageBox("a=1");
           }
         else
          {
         AfxMessageBox("a=0");
           }
     }void mydlg::funtion2()
    {
    ....
    ....
    mydlg::funtion3();
    .....
    .....
    }void mydlg::funtion3()
    {
    ...
    a=1;
    wait=0;
    ....
    }
      

  4.   

    so complex ..update ur source code
      

  5.   

    笔误:while(a>1)为while(wait>1)
      

  6.   

    It's normal...function1 includes function2,function2 includes function3, then function3 includes function1..I just wonderwhat r u doing ?  such a strange design !
      

  7.   

    我是用在RICHEDIT中的,给它添加右键响应"copy,paste,cut"。
      

  8.   

    to qing_li73(bluemoon:function3 does't includes function1
      

  9.   

    不是函数的其它地方修改了a,而是函数funtion3()还没有调用完毕之前已经执行
    funtion1()中的“
        if(a==1)
          {
           AfxMessageBox("a=1");
           }
         else
          {
         AfxMessageBox("a=0");
           }为什么这样说?
    这些代码可以并行执行么?
      

  10.   

    当然会死循环了,wait永远大于1
      

  11.   

    第二段代码进入死循环很正常,你自己干的嘛!(wait=2;
    while(wait>1)
    {;
    })
    可是第一段代码就值得看一下,
    看看类里面是不是有同名变量把全局的a给覆盖了
    不然有谁可以解释呢?