Juce源码分析(一)Juce的优势

为什么学习Juce

       JUCE (Jules' Utility Class Extensions)是由Raw MaterialSoftware发布的一套基于c++的跨平台应用程序框架类库(Windows, Mac,Linux)。JUCE的特殊之处在于其友好的用户界面以及强大的音频、图像处理能力。JUCE适合那些想使用干净、快捷、高层的API,而不想把时间浪费在使用不同类库,面向不同平台上的开发者。JUCE能够胜任大型、复杂的应用程序(C++)的开发。


      相对于国内的诸多开源Dui界面库,Juce有更多的优点,是一套比较全面,综合性的C++代码库。

 一、多线程的维护

       比如,大家都比较熟悉的Duilib,Duilib在单线程应用时还比较不错,但是对于复杂的多线程应用程序,就有些力不从心了,因为维护所有控件使用的都是CPaitManagerUI中的控件指针,而CPaintManagerUI又以成员变量的方式存在于CWindowWnd中,当不同的线程,同时修改同一个控件的属性时,就相当于不同的线程同时操作同一个共享变量,CPU的切换不当很有可能损坏数据,从而导致程序出现异常。为了维护多线程,Juce自身维护了许多线程同步机制,比如原子数据类型、自旋锁、临界区、事件等,还有配套使用的面向对象的Thread类,这些东西使多线程的编程变得更容易,程序更加健壮。

       二、内存的维护

        无论是使用malloc开辟内存,还是使用new创建对象,Juce都封装了自动内存释放机制,类似于智能指针,在小范围内使用智能指针,可以无需考虑内存和对象的析构。最主要的是,Juce还实现了类似于脚本语言的WeakReference(弱引用)类型,可以有效解决C++编程的垂悬指针问题。


       三、完全自绘的界面

           像Duilib这种轻量级界面库,Edit使用的还是原生的,这就导致了透明异形窗口的实现非常困难,因为带有Layered属性的窗口是无法正常显示子窗口的。还有Duilib用窗口模拟的菜单,虽然外形上模拟的非常像,但是机制上还与原生的菜单有很大的差别,这一点笔者亲自做过测试。Juce对这些控件的模拟还是非常完美的。其次Juce还实现了普通界面库难以实现这样的复杂控件,比如代码编辑器,支持拖拽功能的树控件,显示3D模型的控件等等。另外,Juce自身还实现了强大的绘图引擎,可以在GDI和Opengl之间切换。


        四、跨平台

        Juce的C++代码可以在不同的平台编译出适合不同平台的应用程序。


       其实Juce的优点还有很多,这里描述的并不完善。笔者介绍Juce的优点,不是在贬低国产的开源界面库,鼓励大家使用Juce。而是倡导大家通过学习和分析Juce源码,学习它的编程思想,来不断完善我们自己的界面库。

 

         Juce源码下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Skilla

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值