将DirectShow播放文件的功能写成了一个动态库,然后用Delphi写的主程序调用这个动态库来播放文件,当长时间播放后执行动态库的SetPosition函数来调节播放位置时,会停顿上十几秒的时间。
   1、发生这种现象时该程序的CPU使用率降到了0
   2、执行过一次SetPosition后在短时间内再次执行则不会发生,只有间隔时间较长时(10分钟后)才能明显的看出停顿来。
   3、使用VC写的主程序调用该动态库无此现象   急死了,不只哪位大侠了解
   分数可以再加

解决方案 »

  1.   

    可能是Delphi程序的系统要求太高,长时间后,你的dll里不常用的代码被交换到硬盘上。
    当你要用时他从硬盘上临时倒入,引起延迟。当程序等待硬盘中的代码调入时CPU占用为0也是对的。而VC程序的系统消耗小,不会令DLL被交换。
    你可以把程序换到一个大内存的机器上去运行,如果问题解决了,那就说明我的猜测正确。
    如果仍是这样,那就再找找原因。
      

  2.   

    这应该是DELPHI的问题, DELPHI对大buffer的管理可能没有VC效率高. 所以当播放长时间后seek明显延迟.个人理解, 希望知道的来说明一下.
      

  3.   

    播放全用的vc的动态库调DirectShow,Delphi只是在必要的时候调用动态库
      

  4.   

    Delphi的效率肯定不比VC的高,尤其在DirectX编程方面.
      

  5.   

    此现象我也遇到过,大概30分钟左右。画面会停止,但网络传的数据流又是正常的。须重新打开才能正常。
    可以是Delphi与VC的缓冲区利用问题吧。
    若觖决后,请告知我:[email protected]
    为谢!