陆其明's Blog

My Technical Experience, My Books, My Career...

用户操作
[即时聊天] [发私信] [加为好友]
陆其明ID:happydeer
114451次访问,排名761(1)好友0人,关注者33
Multimedia
happydeer的文章
原创 22 篇
翻译 3 篇
转载 3 篇
评论 98 篇
Happydeer的公告


最近评论
yewenlin:以上链接失效了,请更新
afleaf:陆老师你好,我在csdn上看到你回复的一个帖子,是关于ACM采样频率转换,其中的CConversionStream类只给出了OpenStream(void) 和DoConverting两个成员函数。我修改了sourceFormat和destFormat参数,可是在acmStreamOpen时返回512错误,可否指点一下。还有这个类的全部源代码可以发给我吗我的邮箱是 theone.pang……
waterathena:陆老师,我买了您的那本DirectShow实务精选,但是为什么第一个例子AVCap,我运行不起来。
我注册了bin文件包里面的所有给出来的Filter,但是还是运行不起来。
我的Direct sdk 版本9.0c.
系统 XP SP2;
编译工具 VC6.0
我使用的是USB Camera,在一台机器上程序一起来就Crash了。在另外一台干净……
emmett:陆老师,
您好!
最近学习过程中碰到一个问题,当我用IMediaSeek::GetDuration试图获得一个文件的长度的时候,在有些情况下,它得到的值是错误的。 我发现有些流行的播放器也有类似的问题。可是有一款叫“千千静听”的播放器总能正确的获得媒体文件的流长度, 不知道它是怎么做的呢? 如何更准确的获得一个媒体文件的有效播放时间呢?
……
emmett:if( DoSomething1() && DoSomething2() &&...&& DoSomethingN() )
return true;
return false;
文章分类
收藏
    相册
    AboutMe
    DocPics
    MVPs
    MyBB
    MyBooks
    推荐站点
    GDCL
    Jemy逐日
    温昱著译评
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 “条件递进式编程”技巧两例收藏

    新一篇: DirectShow音视频同步实验报告(1) | 旧一篇: 最激动人心的图片


    什么是“条件递进式编程”?呵呵,这是我自己起的名字。所谓条件递进式编程,就是指需要一系列相关函数组合执行的情况下,后续函数执行的必要性由前面所有函数执行是否成功来决定。比如说,有一系列函数如下DoSomething1、DoSomething2、DoSomething3......DoSomethingN;DoSomething2函数执行的前提是DoSomething1函数必须执行成功,DoSomething3函数执行的前提是DoSomething1和DoSomething2都执行成功,DoSomethingN函数执行的前提是DoSomething1、DoSomething2、DoSomething3......DoSomething(N-1)都执行成功。

    你会如何来写这段程序?不假思索,你可能会如下编写:

    BOOL DoSomething()
    {
     if (DoSomething1())
     {
      if (DoSomething2())
      {
       if (DoSomething3())
       {
        // ...
        return TRUE;
       }
      }
     }
     return FALSE;
    }

    这种层层嵌套的结构,逻辑上并没有错,但代码的可读性就差了一点。如果系列函数的数量很多(即上述N的值很大),那么整个代码结构的宽度将变得很长,代码的可读性将进一步降低,日后修改代码的时候也很容易出错。

    下面,我将给出两种我本人认为很不错的程序结构。这两种程序结构不是我自创的,但我能看到它们智慧的光芒。另外,关于以下两种程序结构,我不想给出过多解释,读者用心慢慢体会吧!


    程序结构1:

    BOOL DoSomething()
    {
     BOOL pass = DoSomething1();
     if (pass)
     {
      pass = DoSomething2();
     }
     if (pass)
     {
      pass = DoSomething3();
     }
     if (pass)
     {
      // ...
     }
     return pass;
    }


    程序结构2:

    BOOL DoSomething()
    {
     BOOL pass = FALSE; 
     do
     {
      if (!DoSomething1())
      {
       break;
      }
      if (!DoSomething2())
      {
       break;
      }
      if (!DoSomething3())
      {
       break;
      }
      // ...

      pass = TRUE;
     } while (FALSE);
     return pass;
    }

    发表于 @ 2004年08月06日 09:45:00|评论(loading...)|编辑

    新一篇: DirectShow音视频同步实验报告(1) | 旧一篇: 最激动人心的图片

    评论

    #Listart 发表于2004-08-06 10:12:00  IP: 218.76.62.*
    你这样实际上给编程带来了很多麻烦,当然特殊情况除外假如按你的思路解决复杂问题,那么就要给每个判断条件添加一个变量才能满足复杂逻辑。
    #Jemy 发表于2004-08-06 11:11:00  IP: 220.248.17.*
    DoSomethingN不是一个判断条件,而是完成一些操作的函数。你所谓的“很多麻烦”我不是很明白。
    #lv 发表于2004-08-09 11:46:00  IP: 211.99.135.*
    这样可以吗???
    #define CHECK_RTN(rtn) /
    if(!rtn) /
    return;

    CHECK_RTN(DoSomething1);
    CHECK_RTN(DoSomething2);
    CHECK_RTN(DoSomething3);
    CHECK_RTN(DoSomething4);
    #Jemy 发表于2004-08-09 13:46:00  IP: 220.248.17.*
    to lv :

    如果你不需在DoSomething函数返回之前做一些资源释放等清理操作的话,定义这样的宏也是个好主意。
    #yippeesoft 发表于2005-06-27 12:28:00  IP: 61.186.252.*
    我喜欢第一种
    因为我不喜欢返回值BOOL,信息太少
    #emmett 发表于2008-03-28 17:41:19  IP: 219.142.178.*
    if( DoSomething1() && DoSomething2() &&...&& DoSomethingN() )
    return true;
    return false;
    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © Happydeer