2015-12-13 22:04
⁄ 工业·编程
⁄ 共 5109字
循环冗余校验(CRC)是一种根据网络数据封包或电脑档案等数据产生简短固定位数的一种散列函数,主要用来检测或校验数据传输或者保存后可能出现的错误。
循环冗余校验(CRC)是一种根据网络数据封包或电脑档案等数据产生简短固定位数的一种散列函数,主要用来检测或校验数据传输或者保存后可能出现的错误。它是由W. Wesley Peterson在他1961年发表的论文中披露。[来自维基百科]
CRC校验的基本思想是利用线性编码理论,在发送端...
boost库, CRC阅读全文
2015-12-12 12:02
⁄ 工业·编程
⁄ 共 1197字
// boost crc校验 // made by davidsu33 //crc_16_byte crc_32_byte #include "stdafx.h" #include <boost/crc.hpp> #include <boost/filesystem.hpp> #include <boost/io/ios_state.hpp> #include <iostream> #include <string> #include <fstream> #include <cassert> using n...
boost库, CRC阅读全文
2015-12-11 01:11
⁄ 工业·编程
⁄ 共 853字
#include <boost/crc.hpp> // for boost::crc_basic, boost::crc_optimal #include <boost/cstdint.hpp> // for boost::uint64_t #include <cstddef> // for std::size_t #include <iostream> // for std::cout //功能描述:演示如何使用boost库的CRC库生成CRC64校验码 //作者: Kagula...
boost库, CRC阅读全文
2015-01-29 23:12
⁄ 工业·编程
⁄ 共 2191字
Qt 的信号槽和 Boost.Signals 由于有着截然不同的设计目标,因此二者的实现、强度也十分不同。将二者混合在一起使用也不是不可能的,我们将在本系统的最后一部分来讨论这个问题。
使用信号槽
信号槽是伟大的工具,但是如何能更好的使用它们?相比于直接函数调用,有三点值得我们的注意。一个信号槽的调用:
或许会比直接函数调用耗费更多的时间/空间;
可能不能使用 inline;
对于代码阅读者来说可能并不友好。
使用信号...
boost库, stl, 软件开发阅读全文
2014-12-17 06:09
⁄ 工业·编程
⁄ 共 805字
shared_ptr很好地消除了显式的delete调用,如果读者掌握了它的用法,可以肯定delete将会在你的编程字典中彻底消失 。
但这还不够,因为shared_ptr的构造还需要new调用,这导致了代码中的某种不对称性。虽然shared_ptr很好地包装了new表达式,但过多的显式new操作符也是个问题,它应该使用工厂模式来解决。
因此,shared_ptr在头文件<boost/make_shared.hpp> 中提供了一个自由工厂函数(位于boost名字空间)make_shared<...
boost库阅读全文
2014-12-15 05:50
⁄ 工业·编程
⁄ 共 4981字
条款1:不要把一个原生指针给多个shared_ptr管理
int* ptr = new int;
shared_ptr<int> p1(ptr);
shared_ptr<int> p2(ptr); //logic error
ptr对象被删除了2次
这种问题比喻成“二龙治水”,在原生指针中也同样可能发生。
条款2:不要把this指针给shared_ptr
class Test{
public:
void Do(){ m_sp = shared_ptr<Test>(this); }
private:
shared_ptr<Test> m_member_sp;
};
Test* t = n...
boost库阅读全文
2014-11-06 07:11
⁄ 工业·编程
⁄ 共 3450字
(shared_ptr)的引用计数本身是安全且无锁的,但对象的读写则不是,因为 shared_ptr 有两个数据成员,读写操作不能原子化。根据文档(http://www.boost.org/doc/libs/release/libs/smart_ptr/shared_ptr.htm#ThreadSafety), shared_ptr 的线程安全级别和内建类型、标准库容器、std::string 一样,即:
• 一个 shared_ptr 对象实体可被多个线程同时读取(文档例1);
• 两个 shared_ptr 对象实体可以被两个线程同时写入(例2...
boost库阅读全文
2014-11-03 06:15
⁄ 工业·编程
⁄ 共 6348字
这是一篇比较情绪化的blog,中心思想是“继承就像一条贼船,上去就下不来了”,而借助boost::function和boost::bind,大多数情况下,你都不用上贼船。
boost::function和boost::bind已经纳入了std::tr1,这或许是C++0x最值得期待的功能,它将彻底改变C++库的设计方式,以及应用程序的编写方式。
Scott Meyers的Effective C++ 3rd ed.第35条款提到了以boost::function和boost:bind取代虚函数的做法,这里谈谈我自己使用的感受。
基...
boost库阅读全文
2014-11-02 06:35
⁄ 工业·编程
⁄ 共 1907字
我认为C++的allocator是依赖注入的一次失败的尝试。
C/C++里的内存分配和释放是个重要的事情,我同意,在写library的时候,除了默认使用malloc/free,还应该允许用户指定使用内存分配的函数。用现在的话说,如果library依赖于内存分配与释放,就应该允许用户注入这种依赖。我看到有些C library是支持这个的,可以在初始化时传入两个函数指针,指向内存分配和释放的函数。
问题是,allocator是模板参数,而不是构造函数的参数。...
boost库阅读全文
2014-11-01 06:33
⁄ 工业·编程
⁄ 共 1848字
场景:
一个多线程的C++程序,24h x 5.5d运行。有几个工作线程ThreadW{0,1,2,3},处理客户发过来的交易请求,另外有一个背景线程ThreadB,不定期更新程序内部的参考数据。这些线程都跟一个hash表打交道,工作线程只读,背景线程读写,必然要用到一些同步机制,防止数据损坏。这里的示例代码用std::map代替hash表,意思是一样的:
typedef map<string, vector<pair<string, int> > > Map;
map 的 key 是用户名...
boost库阅读全文