自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

KnightOnHorse的博客

追求技术的道路永无止境

  • 博客(94)
  • 收藏
  • 关注

原创 Boost.thread创建线程的各种情景

创建线程 首先看看boost::thread的构造函数吧,boost::thread有两个构造函数: (1)thread():构造一个表示当前执行线程的线程对象; (2)explicit thread(const boost::function0& threadfunc):      boost::function0可以简单看为:一个无返回(返回void),无参数的函数。这里的函数也可以是...

2018-05-28 09:00:26 805

原创 pair的定义

充当map中键-值对的容器:template <class T1, class T2> struct pair{ typedef T1 first_type; typedef T2 second_type; //pair的两个成员分别是first和second。 T1 first; T2 second; pair() : first(T1()), second(T2())...

2018-05-24 15:28:23 601

原创 网络抓包wireshark

抓包应该是每个技术人员掌握的基础知识,无论是技术支持运维人员或者是研发,多少都会遇到要抓包的情况,用过的抓包工具有fiddle、wireshark,作为一个不是经常要抓包的人员,学会用Wireshark就够了,毕竟它是功能最全面使用者最多的抓包工具。Wireshark(前称Ethereal)是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。Wire...

2018-05-23 15:03:51 312

原创 冲突域和广播域

2018-05-23 12:18:27 2971

原创 Boost.mutex连续两次加锁会造成死锁

问题代码如下:#include<iostream> #include<iomanip> using namespace std; #include <boost/thread.hpp> #include <boost/bind.hpp> #include <boost/thread/mutex.hpp> ...

2018-05-23 09:25:54 1676

原创 ICE实现线程安全之监控器

互斥体实现的是一种简单的互斥机制,在任一时刻,只允许一个线程临界区中活动(在使用读写互斥体的情况下,是一个写入者线程或多个读取者线程)。特别地,要让一个线程进入临界区,另一个线程就必须离开它。这意味着,在使用互斥体时,要做到这样的事情是不可能的:在临界区内挂起一个线程,过一段时间再唤醒它(例如,在某个条件变成真时)。为了解决这一问题,Ice提供了监控器。简单地说,监控器是一种用于保护临界区的同步机...

2018-05-22 09:30:53 531

原创 ICE实现线程安全之互斥

如果在一个线程读取某个数据结构的同时,另一个线程正在更新同一个数据结构,除非你用适当的锁保护这个数据结构,否则就会发生严重的混乱。线程模型Ice服务器天生是多线程的。服务器端run time维护有一个线程池,用于处理到来的请求。通过领导者-跟随者(leader-follower)线程模型,客户发来的每个操作调用都会在其自己的线程中被分派。在服务器中,如果所有线程都在执行操作调用,耗尽了线程池,随后...

2018-05-22 09:13:51 729

原创 在Ice 程序中使用属性

读取属性Ice::CommunicatorPtr ic = Ice::initialize(argc, argv);Ice::PropertiesPtr props = ic->getProperties();Ice::Int maxSize= props->getPropertyAsIntWithDefault("Filesystem.MaxFileSize",1024);假定你创建...

2018-05-22 08:54:38 498

原创 ICEBOX的配置和使用【Java】

博客内容参考文章:《Ice分布式程序设计》马维达 译.一、 简介IceBox服务器用于配置服务、并把对它们的管理集中在一起,服务被开发成可动态加载的组件,通过属性为IceBox服务配置它负责加载和管理的应用特有的服务。要把多个服务组合成一个应用,可以通过配置、而不是编译和链接来完成。这解除了服务和服务器的耦合,允许你按照需要组合服务或分离服务。二、 服务管理器除了应用服务所支持的对象,IceBox...

2018-05-21 12:43:46 1458

原创 ICE通信中C/S的结构

一、客户与服务器的结构 Ice 客户与服务器内部的逻辑结构    客户与服务器都由这样一些代码混合而成:应用代码、库代码、根据Slice 定义生成的代码:l Ice 核心为远地通信提供了客户端和服务器端运行时支持。其中的大量代码所涉及的是网络通信、线程、字节序,以及其他许多与网络有关的问题,我们的应用代码应该与这些问题隔离开来。l 代理代码是根据你的Slice 定义生成的。如果你调用代理的某个函数...

2018-05-21 12:27:22 442

原创 ICE环境变量的配置和在VS中的设置

环境变量配置 1、Ice-3.4.0安装到D:\ProgramFile\ICE 2、Ice-3.4.0-ThirdParty-VC71.msi到D:\ProgramFile\ICE\ThridParty 3、在OS系统环境变量中添加ICEROOT,指向D:\ProgramFile\ICE 4、在OS系统环境变量path添加“%ICEROOT%\bin;”、“%ICEROOT%\lib;” VC环境...

2018-05-21 10:36:15 1133

原创 ICEBOX的配置和使用【CPlusPlus】

一 理论部分(1) 为什么要使用icebox?icebox server代替了通常的server.icebox是为了方便集中管理多个ice服务而建立的。它通过使用icebox服务器,把ice服务注册进去,从而建立联系。所以它除了建立传统的ice服务器,ice客户端,主要是配置icebox服务器。二 编写icebox配置文件1 建立icebox服务器,主要是配置文件的编写#file   icebox...

2018-05-21 09:52:02 874

原创 ICE中间件的相关名词解释

Ice是“一种现代的面向对象中间件。为上层应用提供高效的网络通信平台。它提供了跨平台 ,跨语言的解决方案。简单的示意图如下:相关的名词:1、 Ice 对象是一种概念性的实体,是服务器的抽象化。Ice 对象具有以下特征: (1)Ice 对象是本地或远地的地址空间中、能响应客户请求的实体。(2)一个 Ice 对象可在单个或多个服务器中实例化。每个 Ice 对象都有一个唯一的对象标识 (object i...

2018-05-21 08:50:28 670

原创 在VS2010中配置ICE插件的步骤

ICE为不同的IDE都提供了插件。本文介绍VS2010下的配置。首先建立一个控制台工程,以此为例,进行介绍。1.激活插件选择工具-> IceConfiguration或者在工程右键选择IceConfiguration,打开插件的配置界面。2.配置工程设置Enable IceBuilder必须选择。Trace Level 用来控制输出窗口中打印的信息。Outpu...

2018-05-21 08:35:24 944

原创 ICE 创建 聊天室小程序

  ICE的优势是作为通讯中间件可支持跨平台的通讯,目前支持C++、C#、JAVA、Python、Ruby等多种语言。下面通过一个示例,描述怎样通过ICE建立C++与C#之间的通讯。一 示例描述    搭建一个简单的聊天室,服务端使用C++实现,客户端使用C#实现,中间以ICE构建通讯通道。聊天室实现的功能包括:用户登录/注销、发送消息、接受消息。二 准备Slice文件    Slice作为ICE...

2018-05-20 23:21:51 646 1

原创 ICE Application和Service使用方法简介

最近研究了一下网络通信中间件ICE的使用,粗通其皮毛,按照官方手册依葫芦画瓢写了一个程序员都喜闻乐见的“Hello World”程序,服务端和客户端均用C++开发,通讯协议使用默认的TCP。感觉ICE的大致好处有以下两点:平台无关性。无论客户端或者服务端均可用现在流行的开发语言(C++ /JAVA/C#/php)进行开发,并且屏蔽语言差异性。现在比较流行的方式是客户端用C#开发,与用C++开发的服...

2018-05-20 21:36:32 1878

原创 ICE实现的简单文件系统

我们的文件系统应用将实现一个简单的层次结构的文件系统,就像我们在 Windows 或 UNIX 上所看到的文件系统。为了让例子代码的数量保持在可以管理的范围内,我们忽略了真实的文件系统的许多方面,比如所有权、权限、符号链接,以及其他一些特性。但我们所构建的功能足以告诉你,可以怎样实现一个功能完备的文件系统,而且我们还考虑了像性能和可伸缩性这样的问题。以这种方式,我们可以创建一个具有现实的复杂度的应...

2018-05-20 17:22:57 468

原创 ICE简介

1、ICE是什么? ICE是ZEROC的开源通信协议产品,它的全称是:The Internet Communications Engine,翻译为中文是互联网通信引擎,是一个面向对象的中间件,使我们能够以最小的代价构建分布式应用程序。ICE使我们专注于应用逻辑的开发,它来处理所有底层的网络接口编程,这样我们就不用去考虑这样的细节:打开网络连接、网络数据传输的序列化与反序列化、连接失败的尝试次数等。...

2018-05-19 14:22:09 1015

原创 VS2010配合ICE3.4开发ICE程序流程

1、下载并安装Ice-3.4.2.msi,安装目录为【IceInstallationRootDirectory】;2、在环境变量Path中添加ice相关小工具的执行目录【IceInstallationRootDirectory\bin\vc100】。如果电脑安装的是64bit的VS2010,目录应该为【IceInstallationRootDirectory\bin\vc100\x64】;3、创建...

2018-05-19 13:29:29 1114

原创 路漫漫其修远兮,吾将上下而求索

未完成待完成代码:#include<iostream>#include<pthread.h>#include<cstdio>#include<list>#include<exception>using namespace std;#include <boost/thread.hpp> #includ...

2018-05-18 12:52:47 223

原创 时间复杂度和空间复杂度

时间复杂度:  一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数f(n),进而分析f(n)随n的变化情况并确定T(n)的数量级。这里用"O"来表示数量级,给出算法的时间复杂度。                     T(n)=O(f(n));  它表示随着问题规模的n的增大,算法的执行时间的增长率和f(n)的增长率相同,这称作算法的渐进时间复杂度,简称时间复杂度。而我们一般讨论的是...

2018-05-18 12:48:18 323

原创 CJobQueue任务队列的实质就是生产者消费者模型的应用

详细实现代码如下:#ifndef JOBQUEUE_H__#define JOBQUEUE_H__#if defined(_MSC_VER) && (_MSC_VER >= 1200)# pragma once#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)namespace net {...

2018-05-18 12:25:49 299

原创 连接服务器,并向服务器发送一个GET请求包,等待响应【异步方式】

连接服务器,并向服务器发送一个GET请求包,等待响应。#include <iostream> #include <string> using namespace std;#include <boost/asio/ip/tcp.hpp> #include <boost/asio.hpp> #include <boost/bin...

2018-05-17 09:22:32 1191

原创 连接服务器,并向服务器发送一个GET请求包,等待响应【同步方式】

连接服务器,并向服务器发送一个GET请求包,等待响应。#include <iostream> #include <string>using namespace std;#include <boost/asio/ip/tcp.hpp > #include <boost/asio.hpp> using namespace boost;...

2018-05-16 12:07:09 884

原创 Boost.worker可以保证ioservice一直run下去,直到调用stop

        boost::asio 在创建io_service时,可以指定线程数,如果没有指定,默认是一个线程,也就是io_service run的那个线程,如果没有任务运行,该线程会退出。       如果在创建的时候指定了线程数,那么io_service在执行的时候线程数就可以并发执行,如果你run的线程还是只有1个,那么io_service想多线程执行也没有条件,asio在内部是没有创建...

2018-05-16 10:21:01 1484

原创 Boost.resolver将域名映射为IP,将服务转换为端口

示例代码如下:#include <iostream> using namespace std;#include <boost/asio/ip/tcp.hpp > #include <boost/asio.hpp> using namespace boost;typedef boost::asio::ip::tcp::resolver::que...

2018-05-16 08:57:54 1055

原创 Boost.query用来保存表示IP的域名和端口上的服务名

示例代码如下:#include <iostream> using namespace std;#include <boost/asio/ip/tcp.hpp > using namespace boost;//用来保存IP地址、域名、IP地址的类型、主机的端口或服务名称typedef boost::asio::ip::tcp::resolver::query...

2018-05-16 08:34:00 257

原创 CThreadGroupEx普通计时器和高精度计时器

每隔一段时间,就会被触发一次,可用于定时备份和CS中的心跳检测.#include<ctime>#include<cstdio>#include<iostream>#include<string>using namespace std;#include <boost/asio.hpp> #include <boost/...

2018-05-16 08:24:06 224

原创 CThreadGroupEx多任务多线程,无序执行和有序执行

CThreadGroupEx对thread_group进行了封装,实现了函数执行体的内置,可以很好地控制各个线程。新增任务的任务可以实现有序执行。#include<ctime>#include<cstdio>#include<iostream>#include<string>using namespace std;#include &lt...

2018-05-15 19:39:19 332

转载 我有一个还在蹒跚学步的小孩是否应该学习Python?

这个问题是美国知名的网站提出来,原文如下:I have a toddler. How should she prepare herself for the job market 15 years from now in the world of AI? Should I teach her Python as soon as she is willing to learn?神奇的地方,居然是AI牛...

2018-05-15 12:56:11 257

转载 为什么程序员要坚持学习呢?

进行社招面试时,有一个问题几乎是必问的:"你为什么要离开上一家公司?"其实这个问题主要是想试探一下求职者的核心诉求,并借此预估一下他在本公司工作的稳定性。常见的答案也无非就是这么几种:对薪酬不满意、干得不爽,或者是想换个环境。然而,我遇到过好几个初次跳槽的求职者给出的答案是:「在原来的公司学不到技术」。一听到这个,我就不由得叹口气:今天这一小时又算是白费了,这人基本上没戏。因为根据我的经验,这句话...

2018-05-15 12:53:17 666

原创 Boost.mutex递归访问同一把锁造成死锁

mutex虽然可以很好地协调线程同步,互斥访问全局变量。但不慎使用,也可能会造成死锁。下面这段代码就演示了递归访问同一把锁造成的死锁:#include<iostream>#include<iomanip>using namespace std;#include <boost/thread.hpp> #include <boost/bind.hp...

2018-05-15 09:24:44 923

原创 Boost.DateTime日期时间的操作

Boost.DateTime库提供了时间日期相关的计算、格式化、转换、输入输出等等功能,为C++的编程提供了便利。不过它有如下特点:1. Boost.DateTime 只支持1400年以后的任何Gregorian日历日期。如果你需要计算再早的日期,则需要寻求其他库来支持。日期和时间是编程过程中常用的操作。在C标准库中,<time.h>提供了time_t类型、和tm结构类型的时间日期相关...

2018-05-14 13:45:36 823

原创 Boost.shared_ptr陷阱

条款1:不要把一个原生指针给多个shared_ptr管理int* ptr = new int;shared_ptr<int> p1(ptr);shared_ptr<int> p2(ptr); //logic errorptr对象被删除了2次这种问题比喻成“二龙治水”,在原生指针中也同样可能发生。 条款2:不要把this指针给shared_ptrclass Test{publ...

2018-05-14 12:26:54 816

原创 Boost.circular_buffer用法详解

Boost.Circular_buffer维护了一块连续内存块作为缓存区,当缓存区内的数据存满时,继续存入数据就覆盖掉旧的数据。它是一个与STL兼容的容器,类似于 std::list或std::deque,并且支持随机存取。circular_buffer 被特别设计为提供固定容量的存储大小。当其容量被用完时,新插入的元素会覆盖缓冲区头部或尾部(取决于使用何种插入操作)的元素。具体用法详见代码:#i...

2018-05-12 21:52:20 3684

原创 Boost.asio网络库多线程并发处理实现,以及asio在多线程模型中线程的调度情况和线程安全

1、实现多线程方法:其实就是多个线程同时调用io_service::run      for (int i = 0; i != m_nThreads; ++i){ boost::shared_ptr<boost::thread> poThread(new boost::thread(boost::bind(&boost::asio::io_service::run,&...

2018-05-12 17:33:58 5315

原创 CSemaphore自定义轻量级信号量实现的同步

程序描述:主线程启动10个子线程并将表示子线程序号的变量地址作为参数传递给子线程。子线程接收参数 -> sleep-> 全局变量++ -> sleep -> 输出参数和全局变量。要求:1.子线程输出的线程序号不能重复。2.全局变量的输出必须递增。下面画了个简单的示意图:分析下这个问题的考察点,主要考察点有二个:1.主线程创建子线程并传入一个指向变量地址的指针作参数,由于线程...

2018-05-12 15:22:13 408

原创 win_iocp_io_service浅析

进入正题,简要说一下asio的实现原理吧。在win32平台上,asio是基于IOCP技术实现的,我以前也用过IOCP,却没想到居然能扩展成这样,真是神奇!在其他平台下还会有别的方法去实现,具体见io_service类下面这部分的源码:  // The type of the platform-specific implementation.#if defined(BOOST_ASIO_HAS_IO...

2018-05-12 14:30:50 690

原创 Boost.thread之while(true)型线程终结方法

我们的程序中经常会用到线程来执行某些异步操作,而有些时候我们的线程执行的函数是这个样子的:void ThreadBody() { while( true ) { std::cout << "Processing..." << std::endl; Sleep(1000); } }  那么,...

2018-05-12 10:38:00 577

原创 IO模型

io_service对象是asio框架中的调度器,所有异步io事件都是通过它来分发处理的(io对象的构造函数中都需要传入一个io_service对象)。    asio::io_service io_service;    asio::ip::tcp::socket socket(io_service);在asio框架中,同步的io主要流程如下:    应用程序调用IO对象成员函数执行IO操作IO...

2018-05-12 08:37:42 234

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除