[并发并行]_[线程池]_[Programming With POSIX Threads的线程池实现分析1]

场景1.C++标准库没有提供线程池操作, 连Win32都没有集成线程池, 相比之下macOS完善多了, 至少有operations. 多线程在执行多任务时有很大优势, 比如同时管理多个设备, 多个socket连接等.2.第3方库也有很多, 最常见的是boost的线程, 可是boost编译的成本也很高, 打包也很大, 一般不考虑.说明1.Programming With POSIX Threads 的...
阅读(266) 评论(0)

[Windows]_[网络]_[浏览器无法访问网站DNS_PROBE_POSSIBLE]

场景1.IE,Firefox浏览器访问不了网站, 谷歌浏览器可以, 返回错误码 DNS_PROBE_POSSIBLE.2.ping www.qq.com可以 ping通, ping局域网也可以ping通, 就是不能上qq.rtx.3.DNS已经设置, 通过命令ipconfig /all可以看到设置的DNS, DNS也是对的, 同事也是这么设置的. 说明1.通过浏览器的错误码可知道, 应该就是 DNS...
阅读(52) 评论(0)

[C/C++]_[macOS-Windows]_[原子操作2]

场景1.原子操作一般用在多线程执行的逻辑里, 比如统计业务个数 ++count, 或者下载文件个数,下载大小, 设置对象状态等. 如果不用原子操作, 那么可能在并发情况下, 原本的事务指令A会被事务指令2抢占而导致出现数据被覆盖.说明1.macOS下提供了 来处理 C 方式的原子操作. 如果是object-c方式的原子属性可以使用关键字 atomic.2.C...
阅读(211) 评论(0)

[MD5]_[Windows-macOS]_[计算文件的MD5]

场景1.MD5是比较简单的文件ID, 大部分情况在安全系数要求不高时可以用它来校验文件唯一性. 比如下载文件后进行 md5计算看文件是否完整.2.对字符串进行md5也是一样的.# 例子1.下边是使用系统自带的库或API来完成计算文件的md5, 第3方库 libgcrypt也可以做到, 就是编译比较麻烦.Windows #include std::string AssUtil:...
阅读(396) 评论(0)

[Object-c]_[初级]_[数组NSArray过滤NSPredicate的简单介绍]

场景1.object-c的数组 NSArray 或 C++的 std::vector都支持查询特定条件的对象. NSArray内置了NSPredicate方式的查询, 可以说更加方便.说明1.object-c的 NSPredicate 缺点就是如果对要处理的属性值进行复杂换算再比较是做不到, 比如对属性 name 进行md5计算再比较, 不过这个时候一般都是用for进行迭代. NSPredicate...
阅读(363) 评论(0)

[文件时间]_[Windows-macOS]_[修改文件的创建时间-修改时间]

场景1.修改文件时间一般用在下载远程文件到本地时, 修改其创建时间为远程文件的原时间, 这样对文件排序查找时也方便归类. 这类文件有很多, 视频, 音频, 图片.说明1.Windows 和 macOS都有这种API, Windows以简单的C Win32 api 方式; macOS则使用NSFileManager来修改.例子Windows #include //2014-09-...
阅读(214) 评论(0)

Desktop Applications (Visual C++)- 微软的如何学好桌面本地应用程序给出的指南

转载链接: https://docs.microsoft.com/zh-cn/cpp/windows/desktop-applications-visual-cppDesktop Applications (Visual C++)2016-11-4 3 分钟阅读时长 作者    A desktop application in C++ is a native application that ca...
阅读(122) 评论(0)

Visual Studio 版本中的 Visual C++ 工具和模板

Visual Studio 版本中的 Visual C++ 工具和模板Visual Studio 2015其他版本 若要了解有关 Visual Studio 2017 RC 的最新文档,请参阅 Visual Studio 2017 RC 文档。下表显示 Visual Studio 中可用的 Visual C++ 功能。 单元格中的 X 指示功能可用;空单元格指示功能不可用。 括号中的说明指示功能可...
阅读(116) 评论(0)

[C/C++11]_[初级]_[使用正则表达式库进行分组查询]

场景1.正则表达式在查询替换字符串数据时效率很高, 可以节省很多不必要的查询代码. 特别是对字符串分组的查询, 可以说如果没有正则表达式,查询分组里的字符串需要写很多额外的代码,还不一定准确.2.查询并替换XML标签是比较常见的需求, 比如过滤掉HTML标签里的标签, 提取字符串内容等.例子1.这里举例了C++正则库的分组查询功能, 一个用于提取特定字符串, 一个用于替换字符串. // test-r...
阅读(441) 评论(0)

[C/C++]_[初级]_[关于Gdiplus::Bitmap使用的注意事项]

场景1.我们一般使用 Gdiplus::Bitmap 来存储图像数据, 使用shared_ptr来对 Gdiplus::Bitmap 进行封装, 达到使用引用计数共享图像对象, 减少内存占用的目的.2.偶尔的时候如果 Gdiplus::Bitmap 使用不当释放时会出现崩溃错误, 什么原因呢? 说明1.原因是 Gdiplus::Bitmap* 不可以在 Gdiplus::GdiplusShutdow...
阅读(207) 评论(0)

[C/C++]_[初级]_[通过映像名称判断进程是否存在]

场景1.有时候通过查询进程映像名称来判断某个程序是否在执行, 比如判断 adb.exe 是否正在运行, 从而不需要再次开启 adb进程; 或者某个服务是否开启, 比如AppleMobileDeviceService.exe 来判断是否启动了Apple移动设备服务, 从而提醒用户.代码1.如果查询的多个进程有存在的,即返回TRUE. // test-process.cpp : 定义控制台应用程序的入口...
阅读(141) 评论(0)

[C/C++]_[初级]_[关于std::string的compare陷阱]

场景1.std::string 我们经常用来存储字符串数据, 当然它也可以作为byte的存储器,存储任意字节.2.通常情况下我们使用 std::string 的 compare 方法比较字符串, 但这个方法比较奥字符串是不可靠的.说明1.compare 方法和 strcmp并不相同, 它比较的是 std::string size()大小里的所有字节.在size() 长度范围里, 如果有’\0’字符,...
阅读(652) 评论(4)

[C/C++]_[初级]_[获取Windows系统的位数32位或64位]

场景1.在Windows 64bit系统开发程序时, 某些情况需要判断Program Files路径, 但是64bit系统有两个Program Files或 Program Files(x86), 这时候就需要根据当前系统的位数来获取路径了.说明1.通过判断程序是32bit或64bit并没有什么用,因为64bit系统可以运行32bit和64bit程序. 2.64bit系统的kernel32.dll...
阅读(846) 评论(0)

[并发并行]_[中级]_[实现Pthread线程并发读写锁rwlock]

场景1.所有STL的类实例都是并发读线程安全的,除了shared_ptr,iostream 可允许并发写.在设计对象结构时,往往会用到std::vector,std::map 作为容器存储. 并在多线程程序里并发读写. 当然如果牺牲性能只在一个特定线程里读/写当然也可以,只是性能会降低,而且会带来异步执行的烦恼.2.当然如果多线程可以读写,那么对这个共享对象是需要加锁的, 而多线程的坏处是你并不知道...
阅读(408) 评论(0)

[Zlib]_[初级]_[使用zlib库压缩目录]

场景 http://blog.csdn.net/infoworld 压缩目录为zip不用多说了, 很多场景都会用到, 比如打包文件, 打包目录下载等. 说明 zlib里的minizip并不可以直接使用来压缩文件夹, 但并不妨碍我们借鉴它的代码. 关键其实就在这个变量里savefilenameinzip, 它支持目录结构的名字. 所以只需要在调用 zipOpenNewFileInZip3_64 时,...
阅读(825) 评论(2)

[sqlite3]_[初级]_[使用正则表达式REGEXP查询]

场景1.在一些数据库db文件中,随着版本更新可能会有不同的表名, 但是这些表名一般都符合某种规则, 所以适配不同版本的数据库表时, 最好的办法是动态获取表名.2.或者在查询Text数据里需要匹配某个email,某个数值, 都可以用正则表达式.说明1.REGEXP 操作符是sqlite3的一个调用regexp()函数的特殊语法. 默认情况下没有定义这个regexp()用户函数, 所以在使用REGEXP...
阅读(1087) 评论(1)

[并发并行]_[任务停止]_[使用Pthread的线程本地存储来停止任务执行]

场景1.多线程应用里, 线程基本上都是出自线程池, 那么基本不能使用pthread_cancel这类API, 因为它会终止线程运行, 线程终止后不能再次循环使用, 这对性能要求高的软件时基本是不会用pthread_cancel来停止逻辑运行的.2.自行设计的可预测伪线程停止,其实就是停止执行当前的业务逻辑,并不是终止线程, 让线程回归线程池. 目前我发现的方案基本上离不开对状态变量的判断. (比较忙...
阅读(519) 评论(0)

[并发并行]_[线程取消]_[Pthread的线程取消特性]

场景1.大多数情况下我们都从线程池获取工作线程执行任务,线程池的线程缺点就是不能使用线程的取消特性. 因为线程取消(停止)就是终止线程, 终止后的线程不能再次重用.2.在有线程池的情况下, pthread_cancel 目前发现只能用在程序退出时终止所有线程. 至于线程池的取消操作, 有很多种方法, 比如使用Thread-specific data.(最终还是要判断某个变量)3.如果没有线程池, 那...
阅读(484) 评论(0)

[C/C++标准库]_[初级]_[转换UTC时间到local本地时间]

场景1.如果有面向全球用户的网站, 一般在存储时间数据时存储的是UTC格式的时间, 这样时间是统一的, 并可以根据当地时区来进行准确的转换.2.存储本地时间的问题就在于如果换了时区, 那么显示的时间并不正确. 所以我们存储时间时最好还是存储UTC时间,便于正确的转换.说明1.C/C++标准库提供了标准函数可以转换, 不需要借助Win32 API.例子 // test_datetime_format....
阅读(942) 评论(0)

[Zlib]_[初级]_[使用zlib库压缩和解压字符串STL string]

场景1.一般在使用json传输数据时, 数据量特别大时,传输的过程就特别耗时, 因为带宽或者socket的缓存是有限制的, 数据量越大, 传输时间就越长. 网站一般使用gzip来压缩.说明1.zlib库可以实现gzip和zip方式的压缩, 这里只介绍zip方式的压缩, 一般写客户端程序已足够.2.修改了一下zpipe.c的实现, 其实就是把读文件改为读字符串, 写文件改为写字符串即可.例子 // t...
阅读(371) 评论(0)
285条 共15页1 2 3 4 5 ... 下一页 尾页
    个人资料
    • 访问:751266次
    • 积分:9716
    • 等级:
    • 排名:千里之外
    • 原创:266篇
    • 转载:17篇
    • 译文:2篇
    • 评论:140条
    同行
    任务
    1. 阅读 《Programming With POSIX Threads》并总结 (2017年)
    2. 阅读 《加密与解密》并总结 (2017年).
    QQ: 632994155
    博客专栏
    最新评论