我的if明明成立了,我的代码却不调到if里面去,直接跳过了...用的是VS2008的debug模式,我确定我只有一份源文件,怎么会这样~程序运行的时候也显示错误的结果,然后我断点调试,发现原来是这里被跳过了,请问这要怎么解决?

解决方案 »

  1.   

                    res = WaitForMultipleObjects (MAX_AUDIO_BUF, pOggFile->m_event, FALSE, INFINITE);
    int n=WAIT_OBJECT_0-1;
    if(res >n) 
    pOggFile->ProcessBuffer();
    n的值为-1,res的值在0-9之间,就是被一直跳过~
      

  2.   

    我确定这是BUG了,我代码改成res = WaitForMultipleObjects (MAX_AUDIO_BUF, pOggFile->m_event, FALSE, INFINITE);
    int n=WAIT_OBJECT_0;
    if(res-1>n) 
    pOggFile->ProcessBuffer();
    ReleaseMutex( pOggFile->m_hSingleAcessDirectSoundBuffer8);
    就正常了但是我现在调试就是看不到res等于1的值,res可以是0,2,3,4,5,6,7,8,9,我代码就改了刚才那几个地方,VS2008真是绝了,求高人提供一个比VS2008好用的IDE,我只要平台SDK开发就行了,不需要其他胡里花俏的功能
      

  3.   

    现在2008如果存在这个bug早就会发现了。首先检查自己的代码
      

  4.   


    我用VS2008到现在,发现过不止一次的BUG,难道其他人就没遇到BUG?
      

  5.   


    我代码从BUG出现到BUG结束就改了刚才的那几个语句,又没指针之类的,难道会影响到其他地方?
      

  6.   

    不一定是会出现的,也许是某些代码影响到这个BUG出现,没有软件没BUG的~
      

  7.   

    楼主应该好好学习一下C语言。在C语言操作中,如果遇到无符号数与有符号数之间的操作,编译器会自动转化为无符号数来进行处理。你这里
    int n=WAIT_OBJECT_0-1;
    if(res >n) n=0x00000000 - 1
    n=0xFFFFFFFF
    无符号数的话,条件永远不会成立。
      

  8.   

    WaitForMultipleObjects 返回类型是DWORD型的
    编译器一般会有提示 warning C4018: '>' : signed/unsigned mismatch
      DWORD a = 0;
      int b = -1;
      ASSERT( a > b);
      

  9.   


    这个很对,基础很扎实呀,楼主看编译输出窗口中是不是针对你的这句代码有个Warning在C#里,任何数据都必须显式的强制转换才能使用,否则无法通过编译。
      

  10.   

    res 是无符号数据,修改成 int 类型;出现问题,先多想想为什么,不要总认为是工具的问题;虽然我也不喜欢 2008,因为对于键盘的操作支持不好。
      

  11.   

    你代码问题,不是人家的bug
    if(res >n) res是无符号型,n是有符号型,在这里n会被当成0xffffffff也就是4294967295,
    而不是你认为的-1。
      

  12.   

    而且WaitForMultipleObjects有这么一说
    The function modifies the state of some types of synchronization objects. Modification occurs only for the object or objects whose signaled state caused the function to return. For example, the count of a semaphore object is decreased by one. When bWaitAll is FALSE, and multiple objects are in the signaled state, the function chooses one of the objects to satisfy the wait; the states of the objects not selected are unaffected.大意是:
    多个内核对象被触发时,WaitForMultipleObjects选择其中序号最小的返回。而waitForMultipleObjects它只会改变使它返回的那个内核对象的状态。如果序号最小的那个对象频繁被触发,那么序号比它大的内核对象将得不到被处理的机会。