- 博客(30)
- 资源 (173)
- 收藏
- 关注
原创 kafka的编译和使用
一.kafka的使用kafka官网提供了编译好的二进制包,下载即用http://kafka.apache.org/downloads。最新版本的是1.1.0Kafka是使用scala编写的运行于jvm虚拟机上的程序,虽然也可以在windows上使用,但基本上是运行在linux服务器上,因此我们这里也使用linux(Fedora 20)来开始今天的实战。首先确保你的机器上安装了jdk,k
2018-03-29 16:44:49 8495
翻译 kafka入门指南
kafka是一个分布式的流式平台,它到底是什么意思?流式平台有以下三个主要的功能:☆发布和订阅流记录,类似消息队列或企业级的消息系统。☆你以一种容错的方式存储流记录。☆当流记录产生时及时处理。kafka被用于两大类别的应用程序:☆建立实时的流式数据通道,这个通道能可靠的获取到在系统或应用间的数据☆建立实时流媒体应用来转换流数据或对流数据做出反应。为了明白kafka能怎么做这些事情,让我们从下面开始...
2018-03-28 20:33:12 691
原创 使用State Threads实现简单的服务器
一次只有一个ST在VP上运行,而VP之间不共享内存,所以任何数据都不需要互斥锁,服务器可以自由使用所有的静态变量和非重入库的函数,这大大简化了编程和调试,并提高性能(例如,对于++和---全局计数是安全的或调用inet_ntoa()不需要使用互斥)。此时,所有进程退出。第一个进程的父进程ID是1,这个进程就是守护进程,下面四个进程都是子进程,它们的父进程都是第一个进程。——给出了编程注意点,包括移植,信号,进程内同步,进程间同步,非网络IO,超时处理,特别谈到进程内同步非常简单,不需要同步资源;
2018-03-16 16:06:08 6222 1
原创 uv-cpp:基于libuv实现的C++11风格网络库
libuv是一个跨平台的的基于事件驱动的异步io库。但是他提供的功能不仅仅是io,包括进程、线程、信号、定时器、进程间通信等。libuv主要设计应用于Nodejs,由于其卓越的性能,越来越多的知名项目也使用了这一库。libuv是一个C语言库,意味着回调函数是C语言的回调,所以直接使用libuv网络消息回调,相关对象必须是全局的或者static对象,作为一个C++开发者,这是令人难以容忍的。于是本文将要介绍的uv-cpp应运而生。uv-cpp是基于libuv实现的C++11风格网络库。
2018-03-15 11:22:45 3105
原创 Qt之取消窗体的固定尺寸
如果对窗体设置了固定尺寸(QWidget::setFixedSize),窗体会变得大小不可拉伸,如果需要重新还原可拉伸,必须重新设置最小尺寸和最大尺寸。
2018-03-14 14:25:29 2904 2
原创 Qt之使用QPrinter导出PDF
Qt之使用QPrinter导出PDF,如果要新建一页,可以调用bool QPrinter::newPage(),使用QPrinter导出的PDF有个很明显的缺点:没有书签,如果PDF页数较多,这种方式其实是不太行的。
2018-03-13 17:47:16 29796 1
原创 Qt实现的颜色生成器
有些时候我们需要为一些对象附上随机的颜色,比如我们有这么一个需求,用QCustomPlot绘制曲线,刚开始曲线的颜色默认都是黑色的很不好看,后来为了显示的美观我们想给添加的曲线随机的附上颜色,但是有一个要求,曲线的颜色不能太淡,比如不能是白色。因为图像的背景颜色是白色的,如果曲线也是白色那曲线就会看不到了。这样可以实现我们对随机颜色的要求,但是不满足我们不能为白色的要求,为了避免白色,我们在对这个颜色进行检查,如果r、g、b分量的值都超过230,表示颜色太淡重新随机,但是这样的方法总让人感觉不那么舒服。
2018-03-13 17:43:51 2229 2
原创 Effective C++笔记之七:为多态基类声明virtual析构函数
就像本文标题所说的那样,应该为多态基类声明virtual析构函数,否则容易造成内存泄露。 因为C++明白指出,当derived class对象经由一个base class指针被删除,而该base class如果带有一个non-virtual析构函数,其结果未定义一实际执行时通常发生的是对象的derived成分没被销毁。举个例子:#includeusing namespace std;cla
2018-03-13 09:29:14 1998
原创 C++开源协程库libgo
libgo是一个使用 C++11 编写的协作式调度的stackful有栈协程库, 同时也是一个强大的并行编程库。支持linux平台,MacOS和windows平台。使用libgo编写并行程序,即可以像golang一样开发迅速且逻辑简洁,又有C++原生的性能优势。它的特点有:1.提供golang一般功能强大协程,基于corontine编写代码,可以以同步的方式编写简单的代码,同时获得异步的性能。2.支持海量协程, 创建100万个协程只需使用2GB内存。
2018-03-10 16:35:23 2557 2
原创 Effective C++笔记之六:使用noncopyable禁止类的拷贝
如果某些事物是独一无二的,那么其相应的类就应该禁止拷贝,也就是要使类的copy构造函数和copy assignment操作符不起作用。比如说,地球就是独一无二的,那么可以这么定义地球:class Earth {public: ......//member函数或friend函数private: Earth(const Earth&);//只声明 Earth&am...
2018-03-09 09:54:03 2625
原创 C++笔试题之颜色分类问题(荷兰国旗问题)
本题是经典的“荷兰国旗问题”,由计算机科学家 Edsger W. Dijkstra 首先提出。给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。我们使用整数 0、1 和 2 分别表示红色、白色和蓝色。必须在不使用库内置的 sort 函数的情况下解决这个问题。输入:nums = [2,0,2,1,1,0]输出:[0,0,1,1,2,2]输入:nums = [2,0,1]输出:[0,1,2]
2018-03-08 11:30:44 1995 1
原创 Qt之QSignalMapper
比如工控界面上包含了大量的工控按钮,通常的方法是将每个按钮的clicked()信号链接到它自己的槽。如果使用QSignalMapper,可以将所有按钮的信号连接到同一个槽(QSignalMapper::map()),然后调用QSignalMapper的setMapping方法将sender和字符串(也可以是整型)映射。这样当按钮点击时,QSignalMapper就会发送一个带字符串或整型参数的信号mapped,此时可以将mapped绑定到指定的槽,在槽中进行下一步操作。
2018-03-08 11:06:40 3343 1
原创 Qt优秀开源项目之十五:QCustomPlot
QCustomPlot早已名声在外,使用Qt的几乎无人不知,这篇博客有灌水的嫌疑。QCustomPlot是一个用于绘图和数据可视化的Qt小部件。它只依赖Qt,并且有详细的开发文档。该绘图库专注于制作外观美、质量高的二维绘图形和图表,并提供高性能的实时可视化。从“Setting up”和“Basic Plotting”开始学习,能达到事半功倍的效果。QCustomPlot可以导出为各种格式,如矢量化PDF文件和光栅化图像,如PNG、JPG和BMP。
2018-03-08 10:36:10 5236 2
原创 QImage像素级处理实现暖色、冷色、灰度、反色、黑白等效果
QImage像素级处理实现暖色、冷色、灰度、反色、黑白等效果图片来自张慧雯小姐姐在琅琊榜2中饰演的林溪。模糊和锐化效果对人像不太明显,但是对风景会好能多,比如下面这张风景图。模糊锐化。每一张图片都是由像素点组成,每一个像素都有三个通道:红,绿,蓝,还有一个alpha通道来保存透明度(JPEG格式的图片不支持透明)。每个通道的值是0-255,三个通道都是0的话,表示黑色,都是255表示白色。这篇文章中我们用RGB来表示一种颜色,也就是三个通道的值。
2018-03-08 10:31:10 4872 2
原创 Qt之实时动态曲线和双缓冲(double-buffers)绘图
要绘制动态2D图表或曲线,首先想到的使用第三方开源库QWT,QCustomPlot 等,但这并不影响我们自己去绘制。就像我们能熟练使用Qt模块进行开发了,也很有必要去了解一下Qt的底层实现原理,比如等等。
2018-03-07 20:56:01 5022 2
原创 轻量级C++11日志库spdlog
spdlog是一个只有头文件的轻量级C++11日志库,速度非常快,扩展性很强,更重要的是社区活跃,文档齐全。原来项目中使用的是log4cplus,感觉稍微有点笨重。它支持的平台包括Windows、Linux、Mac、Android。特点如下:1.一个字,快;三个字,非常快2.仅包括头文件3.日志格式丰富,格式化处理使用开源的fmt库(4.可选的异步模式这里的同步/异步指日志信息是否直接输出/写入文件,直接写就是同步,稍后写就是异步。
2018-03-07 20:02:27 4507 1
原创 C++之创建Windows系统服务
Microsoft Windows 服务(即,以前的 NT 服务)使您能够创建在它们自己的 Windows 会话中可长时间运行的可执行应用程序。这些服务可以在计算机启动时自动启动,可以暂停和重新启动而且不显示任何用户界面。这种服务非常适合在服务器上使用,或任何时候,为了不影响在同一台计算机上工作的其他用户,需要长时间运行功能时使用。
2018-03-07 19:32:16 4892
原创 Effective C++笔记之五:了解C++默默编写并调用哪些函数
什么时候empty class(空类)不再是个empty class呢?当C++处理过它之后。是的,如果你自己没声明,编译器就会为它声明(编译器版本的)一个copy 构造函数、一个copy assignment操作符和一个析构函数。此外如果你没有声明任何构造函数,编译器也会为你声明一个default构造函数。所有这些函数都是public且inline。因此,如果你写下:class E...
2018-03-07 13:43:39 1984
原创 Effective C++笔记之四:确定对象被使用前已先被初始化
关于初始化的定义参考Effective C++笔记之一:声明、定义、初始化与赋值,这里先看一个例子:#include <iostream>using namespace std;class TestA{public: TestA() { cout << "default constructor" << endl; } ...
2018-03-04 22:37:16 2009
原创 Effective C++笔记之三:尽可能使用const
关键字const多才多艺。你可以用它在classes外部修饰global或namespace(见Effective C++笔记之二) 作用域中的常量,或修饰文件、函数、或区块作用域(block scope)中被声明为static的对象。你也可以用它修饰classes内部的static和non-static成员变量。面对指针,你也可以指出指针自身、指针所指物,或两者都(或都不)是con...
2018-03-04 15:30:45 2516
原创 Effective C++笔记之二:尽量以const、enum、inline替换#define
一.#define定义的类似函数的宏,使用时易出错缺点描述这样做的初衷是,宏看起来像函数,但不会招致函数调用(function call)带来的额外开销。但即使你为所有实参加上小括,仍然会在使用时遭遇麻烦。举个例子:// 求两个变量中最大的那个#define THE_MAX(a, b) f((a) > (b) ? (a) : (b))当这样使用的时候:THE_MAX(++a, ++b);a...
2018-03-03 21:37:32 2230
原创 Effective C++笔记之一:声明、定义、初始化与赋值
一.声明(Declaration) 声明的作用是指定变量的类型和名称,makes a name known to the program。区分声明和定义可以让C++支持分开编译,比如A.cpp中定义了变量var1,在B.cpp中只需要声明var1这个变量就可以直接使用。因为这样的用法,声明常常见于头文件中。源文件包含头文件之后,就可以使用这个变量,即使没有看到该变量的定义。 声明的语法...
2018-03-03 16:27:05 2611
原创 Qt中使用Font Awesome图标字体库
Font Awesome号称是为Bootstrap设计的完美图标字体,经常出现在各类网页中,非常流行。官网: https://fontawesome.com/中文网: http://www.fontawesome.com.cn/GitHub: https://github.com/FortAwesome/Font-Awesome1. 首先我们从官网或者github上下载到最新的源码建议从github上下载,github上已经是更新6.1了,官网上还是3.2.12. 在解压目录中找到 webfon
2018-03-02 11:22:25 14776
原创 Qt基础之五:使用invokeMethod异步调用函数
在主线程中如果执行比较耗时的任务,但是又不想单独开子线程来处理,不妨试试Qt中提供QMetaObject::invokeMethod方法,该方法支持函数的异步调用,这样就会在界面显示后去执行,而不会卡主主界面这里MyMethod就是被调用的函数名,如果MyMethod带参数且有返回值,如下所示需要注意的是,如果第三个参数使用Qt::QueuedConnection,即异步调用,将无法获取返回值,因为此连接方式只是负责把事件交给事件队列,然后立刻返回,所以函数返回值就无法确定了invokeMet
2018-03-02 10:45:48 12204
原创 Boost.Asio C++ 网络编程之十一:deadline_timer使用说明
deadline_timer和socket一样,都用io_service作为构造函数的参数。也即,在其上进行异步操作,都将导致和io_service所包含的iocp相关联。这同样意味着在析构 io_service之前,必须析构关联在这个io_service上的deadline_timer。一.构造函数在构造deadline_timer时指定时间。basic_deadline_time...
2018-03-01 16:52:49 4757
原创 Boost.Asio C++ 网络编程之十:基于TCP的异步服务端
这个流程图是相当复杂的:从Boost.Asio出来你可以看到4个箭头指向on_accept,on_read,on_write和on_check_ping。这也就意味着你永远不知道哪个异步调用是下一个完成的调用,但是你可以确定的是它是这4个操作中的一个。基于TCP的异步服务端1.流程图2.实现#ifdef WIN32#define _WIN32_WINNT 0x0501#inclu...
2018-03-01 14:36:12 4320
原创 Boost.Asio C++ 网络编程之九:基于TCP的异步客户端
现在,是比较有趣(也比较难)的异步实现! 当查看流程图时,你需要知道Boost.Asio代表由Boost.Asio执行的一个异步调用。例如do_read(),Boost.Asio和on_read()代表了从do_read()到on_read()的逻辑流程,但是你永远不知道什么时候轮到on_read()被调用,你只是知道你最终会调用它。基于TCP的异步客户端1.流程图2.实现#ifde...
2018-03-01 14:19:32 3137
20种数据结构和算法的C++实现
2017-11-17
Qt下用QSplitter实现滑动窗口
2017-11-16
QML实现图像处理,包括浮雕、锐化等效果
2017-11-14
WebRTC学习之四:最简单的语音聊天
2017-01-10
WebRTC学习之三:录音和播放
2016-12-26
Qt国际化(I18N)
2023-12-31
QHVlcPlayer.rar
2021-02-27
Qt+libVLC+QWidget渲染
2021-02-27
Qt调用libVLC实现播放器
2021-02-26
TestUI.rar
2021-02-09
QHOpenGLPlayer.rar
2021-01-10
基于Qt和SDL2播放PCM
2021-01-05
Qt5版NeHe OpenGL教程6-10
2018-05-17
Qt5版Nehe OpenGL教程1-5
2018-05-14
Qt调用OpenGL API实现彩色旋转立方体
2018-05-09
MyTcpClient
2018-03-16
Boost.Asio C++ Network Programming随书源码
2018-01-29
Boost.Asio C++ Network Programming(高清,带书签,可复制)
2018-01-29
Effective Modern C++ 英文原版(带书签)
2018-01-27
++i和i++哪个更高效
2023-02-12
TA创建的收藏夹 TA关注的收藏夹
TA关注的人