摘要: template class threadsafe_queue { private: mutable std::mutex mut; std::queue data_queue; std::condition_variable data_cond; public: threadsafe_queue() {} void push(T new_value) { std::loc... 阅读全文
posted @ 2019-03-06 09:04 KeepInYourMind 阅读(291) 评论(0) 推荐(0) 编辑
摘要: 序列化(serialization):多个线程轮流存取互斥元保护的数据,它们必须线性的而非并发的存取数据。 如何使得数据结构线程安全的基本原理: 保证当数据结构不变性被别的线程破坏时的状态不被任何别的线程看到。 注意避免数据结构接口所固有的竞争现象,通过为完整操作提供函数,而不是提供操作步骤。 注意 阅读全文
posted @ 2019-03-06 09:02 KeepInYourMind 阅读(213) 评论(0) 推荐(0) 编辑
摘要: 传送门 阅读全文
posted @ 2018-09-19 14:24 KeepInYourMind 阅读(92) 评论(0) 推荐(0) 编辑
摘要: 一、模式定义 外观模式(Facade Pattern):外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式又称为门面模式,它是一种对象结构型模式。 二、模式结构 外观模式包含如下角色: 阅读全文
posted @ 2018-09-06 14:25 KeepInYourMind 阅读(156) 评论(0) 推荐(0) 编辑
摘要: 一、定义 适配器模式:将一个类的借口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。 二、模式结构 适配器模式包含如下角色: Target:目标抽象类 Adapter:适配器类 Adaptee:适配者类 Client:客户类 适配器模式有对象适配器和类适配器两种实现: 对象适配 阅读全文
posted @ 2018-09-06 14:19 KeepInYourMind 阅读(147) 评论(0) 推荐(0) 编辑
摘要: Managing Account Permissions 1. Opening a Policy Object Handle. 2. LsaAddAccountRights 阅读全文
posted @ 2018-09-05 16:31 KeepInYourMind 阅读(343) 评论(0) 推荐(0) 编辑
摘要: windows编程的人都知道,在其操作系统下,进程被创建,通常被赋予很多属性,其中一项属性就是用户名,及进程所属的权限。打开任务管理器,可查看到. 通常桌面系统explorer的权限是User权限,即用户权限的,它可以是你administrator,可以是你PC的名字,可以是Guest等,所以我们开 阅读全文
posted @ 2018-09-05 16:20 KeepInYourMind 阅读(4005) 评论(0) 推荐(0) 编辑
摘要: WNetAddConnection2 The WNetAddConnection2 function makes a connection to a network resource and can redirect a local device to the network resource. T 阅读全文
posted @ 2018-09-05 16:14 KeepInYourMind 阅读(388) 评论(0) 推荐(0) 编辑
摘要: 修改程序的权限需要用到3个函数: 1. 获取进程的令牌句柄: OpenProcessToken 2. 查找特权类型的ID: LookupPrivilegeValue 3. 修改进程的特权:AdjustTokenPrivilege 下面详细介绍每个函数的参数及使用方法: Parameters Proc 阅读全文
posted @ 2018-09-05 15:40 KeepInYourMind 阅读(2444) 评论(0) 推荐(0) 编辑
摘要: 转自http://www.json.org/json-zh.html 定义: JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 它基于JavaScript Programming Language, Stan 阅读全文
posted @ 2018-08-27 10:11 KeepInYourMind 阅读(129) 评论(0) 推荐(0) 编辑
摘要: c++11中增加了线程,使得我们可以非常方便的创建线程,它的基本用法是这样的: 但是线程毕竟是属于比较低层次的东西,有时候使用有些不便,比如我希望获取线程函数的返回结果的时候,我就不能直接通过thread.join()得到结果,这时就必须定义一个变量,在线程函数中去给这个变量赋值,然后join,最后 阅读全文
posted @ 2018-08-23 10:44 KeepInYourMind 阅读(868) 评论(0) 推荐(0) 编辑
摘要: 简单地说,std::future 可以用来获取异步任务的结果,因此可以把它当成一种简单的线程间同步的手段。std::future 通常由某个 Provider 创建,你可以把 Provider 想象成一个异步任务的提供者,Provider 在某个线程中设置共享状态的值,与该共享状态相关联的 std: 阅读全文
posted @ 2018-08-23 10:33 KeepInYourMind 阅读(5597) 评论(0) 推荐(0) 编辑
摘要: 1. 当把函数对象传入到线程构造函数中时,需要避免“最令人头痛的语法解析”。如果传递了一个临时变量,而不是一个命名的变量;C++编译器会将其解析为函数声明,而不是类型对象的定义。 例如: ???这里相当与声明了一个名为my_thread的函数,这个函数带有一个参数(函数指针指向没有参数并返回back 阅读全文
posted @ 2018-08-15 12:56 KeepInYourMind 阅读(813) 评论(0) 推荐(0) 编辑
摘要: 定义 命令模式(Command Pattern):将一个请求封装为一个对象,从而使我们可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。命令模式是一种对象行为型模式,其别名为动作(Action)模式或事务(Transaction)模式。 模式结构 命令模式包含如下角色 阅读全文
posted @ 2018-08-01 16:42 KeepInYourMind 阅读(177) 评论(0) 推荐(0) 编辑
摘要: 一、HTTP报文的结构: 二、4种首部字段: 1. 通用首部字段 请求报文和响应报文都会使用的首部。 首部字段名 说明 Cache-Control 控制缓存行为 Connection 逐跳首部、连接的管理 Date 创建报文的日期时间 Pragma 报文指令 Trailer 报文末端的首部一览 Tr 阅读全文
posted @ 2018-07-26 14:46 KeepInYourMind 阅读(357) 评论(0) 推荐(0) 编辑
摘要: 状态码的类别 200 OK: 表示从客户端发来的请求在服务器端被正常处理了 204 No Content: 表示服务器接收的请求已经成功处理,但在返回的响应报文中不含实体的主体部分, 也不允许返回任何实体的主体。 比如, 当从浏览器发出请求处理后,返回204响应,那么浏览器显示的页面不会发生更新。 阅读全文
posted @ 2018-07-25 15:28 KeepInYourMind 阅读(126) 评论(0) 推荐(0) 编辑
摘要: 前一节我讲了怎么设置C++崩溃时生成Dump文件 , 点击 传送门 , 这一节我讲讲怎么使用 VS2012 调试生成的 Dump 文件 , 甚至可以精确到出错的那一行代码上面 ; 1. 生成 Dump 文件 我在主函数写了如下崩溃代码 : 双击运行主程序 , 产生了 Dump 文件 DumpDemo 阅读全文
posted @ 2018-07-20 15:44 KeepInYourMind 阅读(2540) 评论(0) 推荐(0) 编辑
摘要: Dump 文件是进程的内存镜像 , 可以把程序的执行状态通过调试器保存到dump文件中 ; Dump 文件是用来给驱动程序编写人员调试驱动程序用的 , 这种文件必须用专用工具软件打开 , 比如使用 WinDbg , VisualStudio 打开 ; 当我们的程序发布出去之后 , 在客户机上是无法跟 阅读全文
posted @ 2018-07-20 15:39 KeepInYourMind 阅读(1019) 评论(0) 推荐(0) 编辑
摘要: 大部分使用Boost.Asio编写的代码都会使用几个io_service的实例。io_service是这个库里面最重要的类;它负责和操作系统打交道,等待所有异步操作的结束,然后为每一个异步操作调用其完成处理程序。 你有多种不同的方式来使用io_service。在下面的3个例子中,我们有3个异步操作, 阅读全文
posted @ 2018-06-15 17:21 KeepInYourMind 阅读(392) 评论(0) 推荐(0) 编辑
摘要: 同步客户端: 首先,你的程序至少需要一个io_service实例。Boost.Asio使用io_service同操作系统的输入/输出服务进行交互。通常一个io_service的实例就足够了。然后,创建你想要连接的地址和端口,再建立socket。把socket连接到你创建的地址和端口。 同步服务端: 阅读全文
posted @ 2018-06-15 16:38 KeepInYourMind 阅读(930) 评论(0) 推荐(0) 编辑
摘要: 1.Boost::bind 在STL中,我们经常需要使用bind1st,bind2st函数绑定器和fun_ptr,mem_fun等函数适配器,这些函数绑定器和函数适配器使用起来比较麻烦,需要根据是全局函数还是类的成员函数,是一个参数还是多个参数等做出不同的选择,而且有些情况使用STL提供的不能满足要 阅读全文
posted @ 2018-06-12 13:32 KeepInYourMind 阅读(256) 评论(0) 推荐(0) 编辑
摘要: 原子(atomic)本意是”不能被进一步分割的最小粒子”,而原子操作(atomic operation)意为”不可被中断的一个或一系列操作”. (1) 使用总线锁保证原子性 如果多个处理器同时对共享变量进行读写操作,那么共享变量就会被多个处理器同时进行操作,这样读写操作就不是原子的,操作完之后共享变 阅读全文
posted @ 2018-06-11 14:48 KeepInYourMind 阅读(5308) 评论(0) 推荐(1) 编辑
摘要: lock_guard boost::mutex mutex; boost::lock_guard<boost::mutex> lock(mutex); boost::mutex mutex; boost::lock_guard<boost::mutex> lock(mutex); boost::mu 阅读全文
posted @ 2018-06-11 14:42 KeepInYourMind 阅读(4211) 评论(0) 推荐(0) 编辑
摘要: 1. 多个线程访问同一资源时,为了保证数据的一致性,最简单的方式就是使用 mutex(互斥锁)。 引用 cppreference 的介绍: 方法1:直接操作 mutex,即直接调用 mutex 的 lock / unlock 函数此例顺带使用了 boost::thread_group 来创建一组线程 阅读全文
posted @ 2018-06-11 14:39 KeepInYourMind 阅读(66219) 评论(0) 推荐(1) 编辑
摘要: 什么是线程的同步与互斥? 互斥:指在某一时刻指允许一个进程运行其中的程序片,具有排他性和唯一性。 对于线程A和线程B来讲,在同一时刻,只允许一个线程对临界资源进行操作,即当A进入临界区对资源操作时,B就必须等待;当A执行完,退出临界区后,B才能对临界资源进行操作。 同步:指的是在互斥的基础上,实现进 阅读全文
posted @ 2018-06-11 14:22 KeepInYourMind 阅读(958) 评论(0) 推荐(0) 编辑
摘要: 以boost为例。boost::thread有两个构造函数: (1)thread():构造一个表示当前执行线程的线程对象; (2)explicit thread(const boost::function0<void>& threadfunc): boost::function0<void>可以简单 阅读全文
posted @ 2018-06-11 13:09 KeepInYourMind 阅读(2470) 评论(0) 推荐(0) 编辑
摘要: thread::join(): 阻塞当前线程,直至 *this 所标识的线程完成其执行。*this 所标识的线程的完成同步于从 join() 的成功返回。 该方法简单暴力,主线程等待子进程期间什么都不能做。thread::join()会清理子线程相关的内存空间,此后thread object将不再和 阅读全文
posted @ 2018-06-11 12:37 KeepInYourMind 阅读(41014) 评论(0) 推荐(1) 编辑
摘要: 条件变量(Condition Variable)的一般用法是:线程 A 等待某个条件并挂起,直到线程 B 设置了这个条件,并通知条件变量,然后线程 A 被唤醒。经典的「生产者-消费者」问题就可以用条件变量来解决。 这里等待的线程可以是多个,通知线程可以选择一次通知一个(notify_one)或一次通 阅读全文
posted @ 2018-06-11 11:02 KeepInYourMind 阅读(990) 评论(0) 推荐(0) 编辑
摘要: What is DICOM, PACS, and Workstation? What is DICOM, PACS, and Workstation? What is DICOM? We will take them one at a time – So first of all, what is 阅读全文
posted @ 2018-06-08 14:10 KeepInYourMind 阅读(509) 评论(0) 推荐(0) 编辑
摘要: HTTP是一种能够获取如 HTML 这样的网络资源的 protocol(通讯协议)。它是在 Web 上进行数据交换的基础,是一种 client-server 协议,也就是说,请求通常是由像浏览器这样的接受方发起的。一个完整的Web文档通常是由不同的子文档拼接而成的,像是文本、布局描述、图片、视频、脚 阅读全文
posted @ 2018-06-07 16:20 KeepInYourMind 阅读(229) 评论(0) 推荐(0) 编辑
摘要: 什么是敏捷开发? 敏捷开发(Agile Development)是一种以人为核心、迭代、循序渐进的开发方法。 怎么理解呢?首先,我们要理解它不是一门技术,它是一种开发方法,也就是一种软件开发的流程,它会指导我们用规定的环节去一步一步完成项目的开发;而这种开发方式的主要驱动核心是人;它采用的是迭代式开 阅读全文
posted @ 2018-06-07 16:08 KeepInYourMind 阅读(110) 评论(0) 推荐(0) 编辑
摘要: 转自http://www.cnblogs.com/rusty/archive/2011/03/27/1996806.html 一、C语言由源代码生成的各阶段如下: C源程序->编译预处理->编译->优化程序->汇编程序->链接程序->可执行文件 其中 编译预处理阶段,读取c源程序,对其中的伪指令(以 阅读全文
posted @ 2018-06-07 15:11 KeepInYourMind 阅读(535) 评论(0) 推荐(0) 编辑
摘要: 在很多底层网络应用开发者的眼里一切编程都是Socket,话虽然有点夸张,但却也几乎如此了,现在的网络编程几乎都是用Socket来编程。你想过这些情景么?我们每天打开浏览器浏览网页时,浏览器进程怎么和Web服务器进行通信的呢?当你用QQ聊天时,QQ进程怎么和服务器或者是你的好友所在的QQ进程进行通信的 阅读全文
posted @ 2018-06-07 13:50 KeepInYourMind 阅读(490) 评论(0) 推荐(0) 编辑
摘要: Cpplint是一个Python脚本,作为一款开源免费的代码静态检测工具,Google也使用它作为自己的C++代码检测工具,也就是说,只要你的代码遵从Google C++代码规范,那么Cpplint将会提供很好的代码静态检测支持。 下载Cpplint.py源码zip:https://github.c 阅读全文
posted @ 2018-06-06 17:25 KeepInYourMind 阅读(781) 评论(0) 推荐(0) 编辑
摘要: 概念: chrono库:主要包含了三种类型:时间间隔Duration、时钟Clocks和时间点Time point。 Duration:表示一段时间间隔,用来记录时间长度,可以表示几秒钟、几分钟或者几个小时的时间间隔。 Rep表示一种数值类型,用来表示Period的数量,比如int float do 阅读全文
posted @ 2018-06-06 15:44 KeepInYourMind 阅读(1754) 评论(0) 推荐(0) 编辑
摘要: 一、如何把本地项目上传到GitHub 仓库 首先在Github上新建一个repository 启动Git Bash, 进入项目目录 输入 git init 生成本地仓库 输入git add 添加需要提交的文件或者文件夹 输入git commit -m ““ 提交添加的文件和文件夹 输入git rem 阅读全文
posted @ 2018-06-06 15:04 KeepInYourMind 阅读(105) 评论(0) 推荐(0) 编辑
摘要: 单个源文件 cmake_minimum_required:指定运行此配置文件所需的 CMake 的最低版本; project:参数值是 Demo,该命令表示项目的名称是 Demo。 add_executable: 将名为 main.cc 的源文件编译成一个名称为 Demo 的可执行文件 同一目录,多 阅读全文
posted @ 2018-06-06 14:54 KeepInYourMind 阅读(402) 评论(0) 推荐(0) 编辑
摘要: 本文转自:http://www.ruanyifeng.com/blog/2015/12/git-cheat-sheet.html 一般来说,日常使用只要记住下图6个命令,就可以了。但是熟练使用,恐怕要记住60~100个命令。 下面是我整理的常用 Git 命令清单。几个专用名词的译名如下。 Works 阅读全文
posted @ 2018-06-06 14:30 KeepInYourMind 阅读(186) 评论(0) 推荐(0) 编辑
摘要: 背景故事: 老板回来,我不知道! 概念: 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。它还有两个别名,依赖(Dependents),发布-订阅(Publish-Subsrcibe)。 大话设计模式中程杰老师对观察者模式的定义是,观察者模式: 阅读全文
posted @ 2017-12-28 20:53 KeepInYourMind 阅读(191) 评论(0) 推荐(0) 编辑
摘要: 故事背景:好菜每回味不同? 概念: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 一个复杂对象是由多个部件组成的,建造者模式是把复杂对象的创建和部件的创建分别开来,分别用Builder类和Director类来表示。 用Director构建最后的复杂对象,而在上面Buil 阅读全文
posted @ 2017-12-25 21:16 KeepInYourMind 阅读(134) 评论(0) 推荐(0) 编辑