代码改变世界

随笔分类 -  C++

C++多线程环境下注意共享资源的释放顺序

2013-11-16 21:45 by DVwei, 1127 阅读, 收藏, 编辑
摘要: 比如我现在写一个多线程下载程序,包含DownloadTask、HttpDownload两个类。class DownloadTask{ //省略n行代码public: int m_threads;//需创建的线程总数 CCriticalSection m_cs;//临界区 void Stop();};class HttpDownload{ //省略n行代码 HttpDownload(DownloadTask* task): m_task(task) { }public: DownloadTask* m_task; void Start();/... 阅读全文

解决ERROR_INVALID_USER_BUFFER

2013-11-16 20:57 by DVwei, 1969 阅读, 收藏, 编辑
摘要: 我用CSocket编写了一个HTTP下载程序,接收数据大概如下://......//use CSocket class//send request...//......int recevieSize(1);while(recevieSize > 0){ ZeroMemory(buff, BUFFSIZE + 1); receviedSize = socket.Receive(buff, BUFFSIZE); if(receivedSize > 0) { //use CFile class downloadFile.Write(buff, re... 阅读全文

lseek函数与文件空洞

2013-10-16 21:14 by DVwei, 1057 阅读, 收藏, 编辑
摘要: 在UNIX/LINUX系统中,文件位移量可以大于文件的当前长度,这种情况下向文件中写入数据就会产生文件空洞(hole),这些没写入数据的文件空洞部分默认会被0填满。虽然这些文件空洞并没有实际的数据,但是它们仍然占据硬盘空间。 在Windows下同样支持这种文件空洞,以下简单的代码产生一个6KB的空洞文件:#include #include using namespace std;int _tmain(int argc, _TCHAR* argv[]){ CFile testFile(_T("D:\\test"), CFile::modeCreate | CFile::mod 阅读全文

RAII in C++

2013-06-16 19:45 by DVwei, 462 阅读, 收藏, 编辑
摘要: 在C++中,如果对一个块直接分配资源,而且在释放资源之前发生异常,那么这些资源在栈展开(注1)期间将不会得到释放。例如,一个块可以通过调用new动态分配内存,如果该块因异常退出,编译器将不会删除该指针,已分配的内存也不会得到释放。 比如下面这个函数:void funtion(){ vector<string> str_vec; string s; while(cin >> s) v.push_back(s); string *p = new string[v.size()]; delete [] p;} 这... 阅读全文

MySQL Connector/C++(一)

2013-04-18 21:06 by DVwei, 6209 阅读, 收藏, 编辑
摘要: 英文原文:http://dev.mysql.com/tech-resources/articles/mysql-connector-cpp.html#trx如果我翻译错了或者翻译的不好,欢迎指正~Developing Database Applications Using MySQL Connector/C++这个教程会教你搭建安装MySQL Connector/C++ driver的要点和步骤,以一个简单的连接MySQL的例子,从MySQL中获取数据并对其进行插入(数据)操作。因为重点在于从C++程序连接数据库,所以本文档假设MySQL已经运行并且能从客户端访问。本文是面向那些初次接触MyS 阅读全文

交叉编译qt4.8.4 for ARM

2013-04-10 17:25 by DVwei, 5367 阅读, 收藏, 编辑
摘要: 所需工具: 交叉编译工具:arm-linux-gcc 4.4.3 qt4.8.4源码包:qt-everywhere-opensource-src-4.8.4.tar.gz编译: 解压qt4.8.4源码包:tar -zxvf qt-everywhere-opensource-src-4.8.4.tar.gz 设置交叉编译工具链,修改文件/qt-everywhere-opensource-src-4.8.4/mkspecs/linux-arm-gnueabi-g++ /qmake.conf,修改内容如下: # modifications to g++.confQMAKE_CC ... 阅读全文

读书笔记:C++中利用智能指针和值型类防止内存非法访问

2013-03-10 18:18 by DVwei, 735 阅读, 收藏, 编辑
摘要: 在程序当中,经常会用到一些共享对象。一个具有指针成员的类,如果发生复制行为,一个指针复制到另一个指针时,两个指针就指向同一个对象。此时就可以使用任一指针改变这个共享的对象。那么,如果一个指针删除了这个共享对象,那么另一指针就成了悬垂指针,如果再对此对象进行操作时,就会发生内存访问错误。而C++中无法判断一个指针所指向的内存是否有效,这是非常危险的。 看下面一个例子:class MyClass{ public: MyClass(int *p,int i): ptr(p),value(i) { } ~MyClass() { delete ptr; } ... 阅读全文

C++ manpages

2013-02-06 17:32 by DVwei, 311 阅读, 收藏, 编辑
摘要: (1)向系统中添加PPA(即源),并更新sudo add-apt-repository ppa:aitjcize/manpages-cppsudo apt-get update(2)安装程序 manpages-cppsudo apt-get install manpages-cpp(3)从Cplusplus网站上获取数据cppman -c(4)查询方式:cppmancppman coutcppman iterator(5)获取帮助cppman --help 阅读全文