为什么学习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类。这些东西使多线程的编程变得更easy,程序更加健壮。

二、内存的维护

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

三、全然自绘的界面

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

四、跨平台

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


事实上Juce的长处还有非常多,这里描写叙述的并不完好。

笔者介绍Juce的长处。不是在贬低国产的开源界面库,鼓舞大家使用Juce。

而是倡导大家通过学习和分析Juce源代码,学习它的编程思想。来不断完好我们自己的界面库。

Juce源代码下载

Juce源代码分析(一)Juce的优势的更多相关文章

  1. Juce源代码分析(九)应用程序基类ApplicationBase

    在前面的几篇文章,分析的都是Juce库里面Core模块的内存部分,除了骨灰级C++爱好者之外,貌似大家对这些都不是非常感兴趣.相信大家更想知道Juce是怎么用于产品开发,而对于它的构成不是非常感兴趣. ...

  2. Robotium原则的实施源代码分析

    从前面的章节<Robotium源代码分析之Instrumentation进阶>中我们了解到了Robotium所基于的Instrumentation的一些进阶基础.比方它注入事件的原理等,但 ...

  3. 新秀nginx源代码分析数据结构篇(四)红黑树ngx_rbtree_t

    新秀nginx源代码分析数据结构篇(四)红黑树ngx_rbtree_t Author:Echo Chen(陈斌) Email:chenb19870707@gmail.com Blog:Blog.csd ...

  4. 新秀nginx源代码分析数据结构篇(两) 双链表ngx_queue_t

    nginx源代码分析数据结构篇(两) 双链表ngx_queue_t Author:Echo Chen(陈斌) Email:chenb19870707@gmail.com Blog:Blog.csdn. ...

  5. android-plugmgr源代码分析

    android-plugmgr是一个Android插件加载框架,它最大的特点就是对插件不需要进行任何约束.关于这个类库的介绍见作者博客,市面上也有一些插件加载框架,但是感觉没有这个好.在这篇文章中,我 ...

  6. Twitter Storm源代码分析之ZooKeeper中的目录结构

    徐明明博客:Twitter Storm源代码分析之ZooKeeper中的目录结构 我们知道Twitter Storm的所有的状态信息都是保存在Zookeeper里面,nimbus通过在zookeepe ...

  7. 转:SDL2源代码分析

    1:初始化(SDL_Init()) SDL简介 有关SDL的简介在<最简单的视音频播放示例7:SDL2播放RGB/YUV>以及<最简单的视音频播放示例9:SDL2播放PCM>中 ...

  8. 转:RTMPDump源代码分析

    0: 主要函数调用分析 rtmpdump 是一个用来处理 RTMP 流媒体的开源工具包,支持 rtmp://, rtmpt://, rtmpe://, rtmpte://, and rtmps://. ...

  9. 转:ffdshow 源代码分析

    ffdshow神奇的功能:视频播放时显示运动矢量和QP FFDShow可以称得上是全能的解码.编码器.最初FFDShow只是mpeg视频解码器,不过现在他能做到的远不止于此.它能够解码的视频格式已经远 ...

随机推荐

  1. 浅谈malloc/free和new/delete 的区别

    malloc和new的区别 malloc是库函数,需要包头文件才能成功运行编译:new是操作符(C++中的关键字),需要在C++的环境下使用. malloc既可以在C语言中使用也可以在C++中使用,n ...

  2. Spark(十)Spark之数据倾斜调优

    一 调优概述 有的时候,我们可能会遇到大数据计算中一个最棘手的问题——数据倾斜,此时Spark作业的性能会比期望差很多.数据倾斜调优,就是使用各种技术方案解决不同类型的数据倾斜问题,以保证Spark作 ...

  3. [水煮 ASP.NET Web API2 方法论](3-1)集中式路由

    问题 怎样集中的定义路由 解决方案 通过调用 HttpRouteCollectionExtension 类中的 MapHttpRoute 扩展方法在 HttpRouteCollection 中定义路由 ...

  4. 【洛谷】P4643 【模板】动态dp

    题解 在冬令营上听到冬眠的东西,现在都是板子了猫锟真的是好毒瘤啊(雾) (立个flag,我去thusc之前要把WC2018T1乱搞过去= =) 好的,我们可以参考猫锟的动态动态dp的课件,然后你发现你 ...

  5. 【LOJ】#2340. 「WC2018」州区划分

    题解 学习一个全世界人都会只有我不会的东西 子集变换! 难道我要把这题当板子讲?等等这题好像是板...WC出板题好刺激啊= = 假装我们都做过HAOI2015的FMT题,我们都知道一些FMT怎么解决或 ...

  6. java内存溢出分析工具

    http://www.cnblogs.com/preftest/archive/2011/12/08/2281322.html java内存溢出分析工具:jmap使用实战 在一次解决系统tomcat老 ...

  7. Wannafly挑战赛9 B - 数一数

    链接:https://www.nowcoder.com/acm/contest/71/B来源:牛客网 题目描述 设s,t为两个字符串,定义f(s,t) = t的子串中,与s相等的串的个数.如f(&qu ...

  8. sql中的if()和ifnull() 的用法和区别

    if() 把salary表中的女改成男,男改成女: update salary set sex = if( sex = '男','女','男'); if(true,a,b),  if(false,a, ...

  9. odoo基础数据加载

    odoo 基础数据加载 这里介绍的odoo基础数据加载分两种方式,一种是演示数据加载,一种是默认数据加载,下面就是详细介绍 首先,当然是创建一个date文件夹 项目目录,右键自定义一个文件夹 XML数 ...

  10. fast协议解读

    目录 背景 fast协议特征 fast协议解读 背景 股票行情一般传输的数据类型为: int / long / float /double / string 来表示行情价格成交量之类的数据. 正常传输 ...