命名有问题.
我想问的是 等待回调函数的回调者 完全回调完.func x1()
{
   ...
   // 下面使用另一个库中的 函数 otherLibFunc,
   // 此函数需要一个函数指针以作回调
   otherLibFunc( ... , callback_func_ptr);
   // 因为不知道 otherLibFunc 会回调 callback_func_ptr 多少次,
   // 我想等待 otherLibFunc 回调完(不会再回调 callback_func_ptr), 然后再进入下面的代码.
   // ...确保 otherLibFunc 不会再回调 callback_func_ptr??
....
}

解决方案 »

  1.   

    otherLibFunc 不再回调时有没有什么触发事件或者标志啊?
      

  2.   

    没有, 不然就不用这么麻烦了.
    其他lib 是别人提供的, 自己不能作修改.
      

  3.   

    是说otherLibFunc中会新建线程来调用回调函数?
      

  4.   

    回调函数有参数吧,根据这些参数是不是可以判断出来?如果不行的话,只有把程序一直开着,等回调了。或者与写Lib的人商量一个通讯协议,有开始,有过程,有结束。举例说:主人把门牌号告诉客人,如果客人不说以后不来了,主人是不可能知道客人以后来不来的。供参考。
      

  5.   


    参数表没有提供 custom type, 没法设置标记.
      

  6.   

    while(标志位)
    {
        //回调
    }
      

  7.   

    示意代码如下flag = false;//自己设置标志
    otherLibFunc( ... , callback_func_ptr);
    while(flag == false){}
    ...
    ----------------------------void callback_func_ptr()
    {
    ....flag = true;
    }
      

  8.   


    有点异y,
    总的来说, 就是无法确定 lib 什么时候回调, 回调多少次.
    如果 lib 预期会调用 n 次,第n 次之后如果主动通知我 "不用再回调了", 就解决问题了.
    现在是没法接到通知的情形下, 要等待...
    没有办法设置信号.
      

  9.   

    otherLibFunc如果运行时如果不是启动的新线程(同步),应该是全部回调完成时才返回的吧。
    所以不用等,等此函数调用完成时已经是回调完成了吧。如果启动的新线程进行的回调(异步),那你知道次数吗,如果知道就在自己函数callback_func_ptr中记数,然后设置标记。如果可以修改otherLibFunc的代码,建议加上回调完成的标记。这样是最方便的了。
      

  10.   

    goodname这种办法试过的, 甚至使用全局设置标志.
    但 flag=true 这句在第几次回调时设定呢?
    ..?
    你这是当 lib 第一次回调 callback_func_ptr 时, 就将 flag 置 true.
    并不能确保它再次调用前 flag 仍然为 false.
      

  11.   

    我想下面的情形描述一个这个问题:当我调用 lib 的 func 时, 传递 callback_func_ptr 给它:
    libfunc(..., callback_func_ptr,...)libfunc 可能会记录下这个 callback_func_ptr, 以便有需要时回调. 但 libfunc 会立即返回.这样就产生我的问题了, 我不可以保证 callback_func_ptr 在 libfunc 的域中已经失效了.很麻烦, 看来要 提供lib 方增加标志?????
      

  12.   

    你得描述一下
    callback_func_ptr
    这个函数每做完一件事情,你的程序会发生什么变化。比如说数据队列里面增加了元素,你给的libfunc(..., callback_func_ptr,...) 似乎只是注册回调函数,而并没有执行同时执行。
      

  13.   

    对, 我正是将 回调函数的指针给了它, 但它什么时候会回调, 会不会记录这个指针, 我并不清楚.callback_func_ptr 的实现内做什么事情并不需要描述吧, 它一回调, 这个实现就做一件事.如果对方的 lib 记录这个指针, 有什么办法探测? 就像 atl 的 AddRef 和 Release 一样, 可不可能?
      

  14.   

    另外想知道一下
    Win32 中有关 回调函数的函数 是 同步还是异步的, msdn 似乎没有说明.
    而且某些 也需要和这个问题作相同的处理(一直等待).