李sir_Blog

博客园 首页 联系 订阅 管理
  705 随笔 :: 58 文章 :: 134 评论 :: 193万 阅读

05 2011 档案

摘要:1.将Property Grid 控件添加到工具箱中由于默认情况下Property Grid 控件没有显示在工具箱中所以需要手动添加。图1 将Property Grid添加到工具箱(在工具箱上右键选择添加/移除项)图2 在自定义工具箱对话框中选中PropertyGrid控件2.编写自定义类,并跟PropertyGrid控件进行绑定using System;using System.ComponentModel;namespace PropertyGridDemo{[DefaultPropertyAttribute("Name")]public class Customer{ 阅读全文
posted @ 2011-05-28 14:04 李sir 阅读(1729) 评论(0) 推荐(0) 编辑

摘要:http://kb.cnblogs.com/page/43952/ 阅读全文
posted @ 2011-05-20 08:58 李sir 阅读(177) 评论(0) 推荐(0) 编辑

摘要:http://www.360doc.com/content/10/0901/08/737570_50291722.shtml 阅读全文
posted @ 2011-05-18 09:20 李sir 阅读(245) 评论(0) 推荐(0) 编辑

摘要:在设计中为了让界面与逻辑分离,我的做法是使用事件,界面只要响应事件来处理界面的显示就行了。而事件在逻辑处理中可能由不同的线程引发,这些事件的响应方法在修改界面中的控件内容时便会引发一个异常。这时就用到了Control.InvokeRequired 属性 与Invoke方法。MSDN中说:获取一个值,该值指示调用方在对控件进行方法调用时是否必须调用 Invoke 方法,因为调用方位于创建控件所在的线程以外的线程中。 如果控件的 Handle 是在与调用线程不同的线程上创建的(说明您必须通过 Invoke 方法对控件进行调用),则为 true;否则为 false。Windows 窗体中的控件被绑定 阅读全文
posted @ 2011-05-17 13:29 李sir 阅读(406) 评论(0) 推荐(0) 编辑

摘要:解决方案ChatService 服务端主要的三个文件:App.config,ChatService.cs,Program.csFormChatClient 客户端主要二个文件:App.config,ChatForm.cs以下为这五个文件的全部代码及讲解,因为打算放在一篇文章里,所以本文会很长。发由本教程目的并不仅仅让初学者了解怎么开发一个聊天室。而是要通过这个例子加深对C#及WCF一些实用特性的了解。1 Service App.config<xml version="1.0" encoding="utf-8" ><configurati 阅读全文
posted @ 2011-05-16 10:35 李sir 阅读(2316) 评论(0) 推荐(0) 编辑

摘要:一般而言我们创建用于接收error的类型大多声明如下: boost::system::error_code error 我们用这个类型去接受在函数中产生的错误如socket.connect( endpoint, error);如果连接失败,错误类型会保存到error中,比如连接主机失败可能会返回这样的错误boost::asio::error::host_not_found;通过if (error)检测到error后,抛出异常throw boost::system::system_error(error);需要注意的是,我们的error被 转化成 system_error了显示错误很简单了,st 阅读全文
posted @ 2011-05-12 15:26 李sir 阅读(7488) 评论(1) 推荐(2) 编辑

摘要:char d1[128];size_t bytes_transferred = sock.receive(boost::asio::buffer(d1));buffer 大小是自动管理的同样std::vector<char> d2(128);bytes_transferred = sock.receive(boost::asio::buffer(d2));还可以基于boost::arrayboost::array<char, 128> d3;bytes_transferred = sock.receive(boost::asio::buffer(d3)); buffe 阅读全文
posted @ 2011-05-12 15:20 李sir 阅读(2972) 评论(0) 推荐(0) 编辑

摘要:大家都希望可以像操作STL容器一样的去操作数组,C++可没有提供这个东西,有时候你会选择使用vector来替代,不过这毕竟不是个好的办法,毕竟vector模拟动态数组比较稳妥,而用它去替代一个普通的数组,开销毕竟太大了。而恰好,boost::array就为你提供了这个功能。boost::array的定义如下(简化):详情参见相关文件Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->template<class T, std::size_t 阅读全文
posted @ 2011-05-12 15:07 李sir 阅读(8728) 评论(0) 推荐(0) 编辑

摘要:使用情景:当类对象被 shared_ptr 管理时,需要在类自己定义的函数里把当前类对象作为参数传给其他函数时,这时需要传递一个 shared_ptr ,否则就不能保持 shared_ptr 管理这个类对象的语义(因为有一个 raw pointer 指向这个类对象,而 shared_ptr 对类对象的这个引用没有计数,很有可能 shared_ptr 已经把类对象资源释放了,而那个调用函数还在使用类对象——显然,这肯定会产生错误)。很好奇这个模板类的实现。先看看怎么使用:对一个类 A ,当我们希望使用 shared_ptr 来管理其类对象时,而且需要在自己定义的函数里把类对象 shared_pt 阅读全文
posted @ 2011-05-05 10:58 李sir 阅读(8685) 评论(1) 推荐(2) 编辑

摘要:boost::format类提供了类似C语言里'printf'功能的格式化输出能力,当然功能更强大。所需头文件:#include <boost/format.hpp>示例代码:#include<iostream> #include<string> #include<boost/format.hpp> usingnamespacestd; int_tmain(intargc,_TCHAR*argv[]) { //使用%序号%的方式给出指示符,后面用%连接对应的数据。 cout<<boost::format("w 阅读全文
posted @ 2011-05-05 10:37 李sir 阅读(15966) 评论(0) 推荐(1) 编辑

摘要:转自:http://blog.csdn.net/Solstice/archive/2008/10/13/3066268.aspx这是一篇比较情绪化的blog,中心思想是“继承就像一条贼船,上去就下不来了”,而借助boost::function和boost::bind,大多数情况下,你都不用上贼船。boost::function和boost::bind已经纳入了std::tr1,这或许是C++0x最值得期待的功能,它将彻底改变C++库的设计方式,以及应用程序的编写方式。Scott Meyers的Effective C++ 3rd ed.第35条款提到了以boost::function和boost 阅读全文
posted @ 2011-05-05 10:10 李sir 阅读(801) 评论(0) 推荐(0) 编辑

摘要:智慧 + 毅力 = 无所不能正确性、健壮性、可靠性、效率、易用性、可读性、可复用性、兼容性、可移植性...boost::asio 的同、异步方式 转自:http://blog.csdn.net/zhuky/archive/2010/03/10/5364574.aspxBoost.Asio是一个跨平台的网络及底层IO的C++编程库,它使用现代C++手法实现了统一的异步调用模型。头文件#include <boost/asio.hpp>名空间using namespace boost::asio;ASIO库能够使用TCP、UDP、ICMP、串口来发送/接收数据,下面先介绍TCP协议的读写 阅读全文
posted @ 2011-05-05 09:37 李sir 阅读(1612) 评论(0) 推荐(0) 编辑

摘要:以前使用ACE实现Server框架,但是觉得太笨重,决定采用boost.asio来写服务器程序: 1.服务器构建在linux上面;当然也可以在windows下运行 2.io部分采用非阻塞模式、业务逻辑部分采用同步线程池实现 3.封装io操作及状态,用户应用程序无需关心io详细操作所以决定采用boost::asio框架来写服务器:boost::asio::io_service提供了核心IO功能、和异步IO对象,它包括: boost::asio::ip::tcp::socket boost::asio::ip::tcp::acceptor boost::asio::ip::udp::socket 阅读全文
posted @ 2011-05-04 17:24 李sir 阅读(18267) 评论(0) 推荐(2) 编辑

摘要:接受器-连接器设计模式(Acceptor-Connector)使分布式系统中的连接建立及服务初始化与一旦服务初始化后所执行的处理去耦合。 这样的去耦合通过三种组件来完成:acceptor、connector 和 servicehandler(服务处理器)。 连接器主动地建立到远地接受器组件的连接,并初始化服务处理器来处理在连接上交换的数据。 接受器被动地等待来自远地连接器的连接请求,在这样的请求到达时建立连接,并初始化服务处理器来处理在连接上交换的数据。 初始化的服务处理器执行应用特有的处理,并通过连接器和接受器组件建立的连接来进行通信。 结构 1. 服务处理器(Service Handler 阅读全文
posted @ 2011-05-04 13:55 李sir 阅读(735) 评论(0) 推荐(0) 编辑

摘要:1.ACE反应器框架简介 反应器(Reactor):用于事件多路分离和分派的体系结构模式 通常的,对一个文件描述符指定的文件或设备, 有两种工作方式: 阻塞与非阻塞。所谓阻塞方式的意思是指, 当试图对该文件描述符进行读写时, 如果当时没有东西可读,或者暂时不可写, 程序就进入等待状态, 直到有东西可读或者可写为止。而对于非阻塞状态, 如果没有东西可读, 或者不可写, 读写函数马上返回, 而不会等待。 在前面的章节中提到的Tcp通信的例子中,就是采用的阻塞式的工作方式:当接收tcp数据时,如果远端没有数据可以读,则会一直阻塞到读到需要的数据为止。这种方式的传输和传统的被动方法的调用类似,非常直观 阅读全文
posted @ 2011-05-04 13:54 李sir 阅读(1065) 评论(0) 推荐(0) 编辑

摘要:主动对象模式用于降低方法执行和方法调用之间的耦合。该模式描述了另外一种更为透明的任务间通信方法。 传统上,所有的对象都是被动的代码段,对象中的代码是在对它发出方法调用的线程中执行的,当方法被调用时,调用线程将阻塞,直至调用结束。而主动对象却不一样。这些对象具有自己的命令执行线程,主动对象的方法将在自己的执行线程中执行,不会阻塞调用方法。 例如,设想对象"A"已在你的程序的main()函数中被实例化。当你的程序启动时,OS创建一个线程,以从main()函数开始执行。如果你调用对象A的任何方法,该线程将"流过"那个方法,并执行其中的代码。一旦执行完成,该线程 阅读全文
posted @ 2011-05-04 13:49 李sir 阅读(923) 评论(0) 推荐(0) 编辑

摘要:udp是一种无连接的协议,提供无连接不可靠的服务。 在ace中,通过ACE_SOCK_Dgram类提供udp通信服务,ACE_SOCK_Dgram和ACE_SOCK_Stream的API非常类似,一样提供了send,recv及close等常用操作,这里就不再累述了。 udp通信时无需像tcp那样建立连接和关闭连接,tcp编程时需要通过accept和connect来建立连接,而udp通信省略了这一步骤,相对来说编程更为简单。 由于udp通信时无建立连接,服务器端不能像Tcp通信那样在建立连接的时候就获得客户端的地址信息,故服务器端不能主动对客户端发送信息(不知道客户端的地址),只有等到收到客户端 阅读全文
posted @ 2011-05-04 13:44 李sir 阅读(741) 评论(0) 推荐(0) 编辑

摘要:概述: 传输控制协议TCP(Transmission Control Protocol):TCP提供可靠的、面向连接的运输服务,用于高可靠性数据的传输。TCP协议的可靠性是指保证每个tcp报文能按照发送顺序到达客户端。 Tcp通信过程一般为如下步骤: 服务器绑定端口,等待客户端连接。 客户端通过服务器的ip和服务器绑定的端口连接服务器。 服务器和客户端通过网络建立一条数据通路,通过这条数据通路进行数据交互。 常用API: 1. ACE_INET_Addr类。 ACE"地址"类ACE_Addr的子类,表示TCP/IP和UDP/IP的地址。它通常包含机器的ip和端口信息,通过它 阅读全文
posted @ 2011-05-04 13:43 李sir 阅读(1113) 评论(0) 推荐(0) 编辑

摘要:ACE Lock类属 锁类属包含的类包装简单的锁定机制,比如互斥体、信号量、读/写互斥体和令牌等。这里我就以互斥体为例简单的介绍一下其使用方法,对其它的锁类进行一些简单的说明。 1.互斥体的使用。 互斥体用于保护共享的易变代码,也就是全局或静态数据。这样的数据必须通过互斥体进行保护,以防止它们在多个线程同时访问时损坏。 在ACE中可以通过ACE_Thread_Mutex实现线程的访问互斥,下面的例子演示ACE_Thread_Mutex类的使用。 #include "ace/Thread.h" #include "ace/Synch.h" #include 阅读全文
posted @ 2011-05-04 13:39 李sir 阅读(5391) 评论(0) 推荐(0) 编辑

摘要:有过在不同的操作系统下用c++进行过多线程编程的朋友对那些线程处理的API可能深有体会,这些API提供了相同或是相似的功能,但是它们的API的差别却极为悬殊,十分令人头痛。 ACE_Thread提供了对不同OS的线程调用的简单包装,通过一个通用的接口进行处理线程创建、挂起、取消和删除等问题。 一. 线程入口函数 所有线程必须从一个指定的函数开始执行,该函数称为线程函数,它必须具有下列原型:void* worker(void *arg) {}该函数输入一个void *型的参数,可以在创建线程时传入。注意:所有的线程启动函数(方法)必须是静态的或全局的(就如同直接使用OS线程API时所要求的一样) 阅读全文
posted @ 2011-05-04 13:32 李sir 阅读(688) 评论(0) 推荐(0) 编辑

摘要:ACE自适配通信环境 (Adaptive Communication Environment)是面向对象的框架和工具包,它为通信软件实现了核心的并发和分布式模式。ACE包含的多种组件可以帮助通信软件的开发获得更好的灵活性、效率、可靠性和可移植性。ACE中的组件可用于以下几种目的: 并发和同步 进程间通信(IPC) 内存管理 定时器 信号 文件系统管理 线程管理 事件多路分离和处理器分派 连接建立和服务初始化 软件的静态和动态配置、重配置 分层协议构建和流式框架 分布式通信服务:名字、日志、时间同步、事件路由和网络锁定,等等。 ACE体系结构 如图1-1所示,ACE具有分层的体系结构。在ACE框 阅读全文
posted @ 2011-05-04 13:28 李sir 阅读(642) 评论(0) 推荐(0) 编辑

摘要:ACE的安装是一件比较麻烦的事情,这里简单的记录了我在VS2005下安装ACE的过程,希望能给大家一个参考。 安装环境: 操作系统:Windows XP 专业版 编译环境:VS2005中文版 ACE版本:ACE-5.5.1 安装过程: 下载安装包。 Ace的安装文件可以在http://download.dre.vanderbilt.edu/中下载到,由于我是在windows环境下安装并且不需要TAO等其它库,便下载了ACE-5.5.1.zip。 下载完成后将其解压。我的解压路径为D:\Develop\ACE_wrappers。 设置环境变量 在操作系统添加一个名为ACE_ROOT的用户环境变量 阅读全文
posted @ 2011-05-04 13:25 李sir 阅读(675) 评论(0) 推荐(0) 编辑

摘要:boost::scoped_ptr虽然简单易用,但它不能共享所有权的特性却大大限制了其使用范围,而boost::shared_ptr可以解决这一局限。顾名思义,boost::shared_ptr是可以共享所有权的智能指针,首先让我们通过一个例子看看它的基本用法: #include <string>#include <iostream>#include <boost/shared_ptr.hpp>class implementation{public:~implementation() { std::cout <<"destroying 阅读全文
posted @ 2011-05-04 13:21 李sir 阅读(818) 评论(0) 推荐(0) 编辑

摘要:1. 序言现在学的东西很容易忘记,写这篇文章的目的是能让我在需要时快速找回当时的感觉. Let's BOOST THE WORLD . 2. 编译:VC2005注意在 属性->C/C++->预处理器->预处理定义 中加入 _CRT_SECURE_NO_DEPRECATE;来屏蔽不必要的警告 3. Asio 网络库Boost.Asio是利用当代C++的先进方法,跨平台,异步I/O模型的C++网络库. 3.1. 网络库:VC2005注意在 属性->C/C++->命令行 中加入 -DBOOST_REGEX_NO_LIB来防止自动连接. 3.2. 同步Timer本 阅读全文
posted @ 2011-05-04 10:07 李sir 阅读(2626) 评论(0) 推荐(0) 编辑

摘要:1,字符串 到 数值类型的转换 2,数值 到 字符串的转换 3,异常处理情况 4,boost::lexical_cast 的原型: template<typename Target, typename Source> Target lexical_cast(Source arg); lexical_cast 是依赖于字符串流 std::stringstream 的,其原理也是相当的简单:把源类型 (Source) 读入到字符流中,再写到目标类型 (Target) 中。但这里同时也带来了一些限制: - 输入数据 (arg) 必须能够 “完整” 地转换,否则就会抛出 bad_lexic 阅读全文
posted @ 2011-05-03 10:30 李sir 阅读(4771) 评论(0) 推荐(0) 编辑

摘要:2. 同步Timer本章介绍asio如何在定时器上进行阻塞等待(blocking wait). 实现,我们包含必要的头文件. 所有的asio类可以简单的通过include "asio.hpp"来调用.#include <iostream> #include <boost/asio.hpp> 此外,这个示例用到了timer,我们还要包含Boost.Date_Time的头文件来控制时间.#include <boost/date_time/posix_time/posix_time.hpp> 使用asio至少需要一个boost::asio::i 阅读全文
posted @ 2011-05-03 10:20 李sir 阅读(9810) 评论(0) 推荐(1) 编辑

点击右上角即可分享
微信分享提示