Chinaunix首页 | 论坛 | 博客
  • 博客访问: 916199
  • 博文数量: 299
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 2493
  • 用 户 组: 普通用户
  • 注册时间: 2014-03-21 10:07
个人简介

Linux后台服务器编程。

文章分类

全部博文(299)

文章存档

2015年(2)

2014年(297)

发布时间:2014-11-09 18:07:00

  应用程序使用DLL可以采用两种方式:一种是隐式链接,另一种是显式链接。在使用DLL之前首先要知道DLL中函数的结构信息。Visual C++6.0在VC\bin目录下提供了一个名为Dumpbin.exe的小程序,用它可以查看DLL文件中的函数结构。另外,Windows系统将遵循下面的搜索顺序来定位DLL: 1.包含EXE文件的目录,2.进程的当前工作.........【阅读全文】

阅读(1807) | 评论(0) | 转发(0)

发布时间:2014-11-09 17:51:25

1. 添加编译所需要(依赖)的 lib 文件[解决方案资源管理器]“项目->属性->配置属性->连接器->输入->附加依赖项”里填写“winsock.lib”,多个 lib 以空格隔开。 (等同于“#pragma comment(lib, "winsock.lib") ”语句)2. 添加库(Libs)文件目录方法 1:[解决方.........【阅读全文】

阅读(1632) | 评论(0) | 转发(0)

发布时间:2014-11-09 17:44:16

1.dll的优点代码复用是提高软件开发效率的重要途径。一般而言,只要某部分代码具有通用性,就可将它构造成相对独立的功能模块并在之后的项目中重复使用。比较常见的例子是各种应用程序框架,ATL、MFC等,它们都以源代码的形式发布。由于这种复用是“源码级别”的,源代码完全暴露给了程序员,因而称之为“白盒.........【阅读全文】

阅读(2052) | 评论(0) | 转发(0)

发布时间:2014-11-06 10:00:48

简单的说:shared_lock是read lock。被锁后仍允许其他线程执行同样被shared_lock的代码。这是一般做读操作时的需要。unique_lock是write lock。被锁后不允许其他线程执行被shared_lock或unique_lock的代码。在写操作时,一般用这个,可以同时限制unique_lock的写和share_lock的读。例子:void Ge.........【阅读全文】

阅读(6774) | 评论(0) | 转发(0)

发布时间:2014-11-05 09:53:16

const修饰普通变量和指针const修饰变量,一般有两种写法:const TYPE value;TYPE const value;这两种写法在本质上是一样的。它的含义是:const修饰的类型为TYPE的变量value是不可变的。对于一个非指针的类型TYPE,无论怎么写,都是一个含义,即value值不可变。 例如:const int nValue; &.........【阅读全文】

阅读(1751) | 评论(0) | 转发(0)

发布时间:2014-11-04 22:30:06

C 风格(C-style)强制转型如下:(T) expression // cast expression to be of type T函数风格(Function-style)强制转型使用这样的语法:T(expression) // cast expression to be of type T这两种形式之间没有本质上.........【阅读全文】

阅读(1365) | 评论(0) | 转发(0)

发布时间:2014-11-04 16:52:21

很多应用层协议都有HeartBeat机制,通常是客户端每隔一小段时间向服务器发送一个数据包,通知服务器自己仍然在线,并传输一些可能必要的数据。使用心跳包的典型协议是IM,比如QQ/MSN/飞信等协议。学过TCP/IP的同学应该都知道,传输层的两个主要协议是UDP和TCP,其中UDP是无连接的、面向packet的,而TCP协议是有连接、面向.........【阅读全文】

阅读(2732) | 评论(0) | 转发(0)

发布时间:2014-11-04 13:27:36

这是一篇比较情绪化的blog,中心思想是“继承就像一条贼船,上去就下不来了”,而借助boost::function和boost::bind,大多数情况下,你都不用上贼船。 boost::function和boost::bind已经纳入了std::tr1,这或许是C++0x最值得期待的功能,它将彻底改变C++库的设计方式,以及应用程序的编写方式。 Scott Meye.........【阅读全文】

阅读(1613) | 评论(0) | 转发(0)

发布时间:2014-11-04 13:23:42

按照默认规定,只有一个参数的构造函数也定义了一个隐式转换,将该构造函数对应数据类型的数据转换为该类对象,如下面所示:class String {String ( const char* p ); // 用C风格的字符串p作为初始化值//…}String s1 = “hello”; //OK 隐式转换,等价于String s1 = String(“hello.........【阅读全文】

阅读(1360) | 评论(0) | 转发(0)

发布时间:2014-11-04 10:52:26

deadline_timer和socket一样,都用io_service作为构造函数的参数。也即,在其上进行异步操作,都将导致和io_service所包含的iocp相关联。这同样意味着在析构 io_service之前,必须析构关联在这个io_service上的deadline_timer。1. 构造函数在构造deadline_timer时指定时间。[cpp] view plaincopyprint?.........【阅读全文】

阅读(6897) | 评论(0) | 转发(0)

发布时间:2014-11-03 21:43:30

1.boost::anyboost::any是一种通用的数据类型,可以将各种类型包装后统一放入容器内,最重要的它是类型安全的。有点象COM里面的variant。使用方法:any::type() 返回包装的类型any_cast可用于any到其他类型的转化#include <boost/any.hpp>void test_any.........【阅读全文】

阅读(1515) | 评论(0) | 转发(0)

发布时间:2014-11-03 20:56:46

io_service::work类可以使io_service::run函数在没有任务的时候仍然不返回,直至work对象被销毁。[cpp] view plaincopyprint?void test_asio_nowork()  {      boost::asio::io_service ios;  .........【阅读全文】

阅读(2666) | 评论(0) | 转发(0)

发布时间:2014-11-03 14:03:37

io_service的作用io_servie 实现了一个任务队列,这里的任务就是void(void)的函数。Io_servie最常用的两个接口是post和run,post向任务队列中投递任务,run是执行队列中的任务,直到全部执行完毕,并且run可以被N个线程调用。Io_service是完全线程安全的队列。Io_servie的接口提供的接口有run、run_.........【阅读全文】

阅读(1293) | 评论(0) | 转发(0)

发布时间:2014-11-03 13:46:35

1:    io_service 与 strand 的关系是什么?2: strand : /// Provides serialised handler execution.      能够保证线程安全,同时被post 或 dispatch 的方法 不会被并发的执行;   而 io_service 不能保证:&nbs.........【阅读全文】

阅读(2616) | 评论(0) | 转发(0)

发布时间:2014-11-03 11:21:37

1,字符串 到 数值类型的转换2,数值 到 字符串的转换 3,异常处理情况 4,boost::lexical_cast 的原型: template<typename Target, typename Source>     Target lexical_cast(Source arg); lexical_cast 是依赖于字符串流 std::stringstream 的,其原理也是相当的简.........【阅读全文】

阅读(946) | 评论(0) | 转发(0)

发布时间:2014-11-02 16:38:28

boost中使用线程和mutex的示例:点击(此处)折叠或打开#include <boost/thread/mutex.hpp>#include <boost/thread/thread.hpp>#include <iostream>boost::mutex io_mutex; // The iostreams are not guaranteed to be thread-.........【阅读全文】

阅读(3079) | 评论(0) | 转发(0)

发布时间:2014-11-02 10:09:50

之前一直看的unix网络编程,使用linux系统调用来创建服务器。而在boost中也同样可以创建服务器,boost对底层的系统调用进行了封装,使用的时候更加面向对象。只需要向相应的对象传递一定的参数即可创建连接:使用的主要的对象如下:client方面:由main出发分别是:boost::asio::ip::tcp::resolver::query m_query("www..........【阅读全文】

阅读(2530) | 评论(0) | 转发(0)

发布时间:2014-10-31 10:40:04

C++的标准模板库(Standard Template Library,简称STL)是一个容器和算法的类库。容器往往包含同一类型的数据。STL中比较常用的容器是vector,set和map,比较常用的算法有Sort等。.一. vector1.声明:          一个vector类似于一个动态的一维数组。 &nbs.........【阅读全文】

阅读(1470) | 评论(0) | 转发(0)

发布时间:2014-10-31 09:37:24

最近在做一个消息中间件里面涉及到多线程编程,由于跨平台的原因我采用了boost线程库。在创建线程时遇到了几种线程创建方式现总结如下:    首先看看boost::thread的构造函数吧,boost::thread有两个构造函数: (1)thread():构造一个表示当前执行线程的线程对象; (2)explicit thread(c.........【阅读全文】

阅读(1646) | 评论(0) | 转发(0)

发布时间:2014-10-30 15:29:10

weak_ptr是为配合shared_ptr而引入的一种智能指针,它更像是shared_ptr的一个助手,而不是智能指针,因为它不具有普通指针的行为,没有重载operator*和operator->,它的最大作用在于协助shared_ptr,像旁观者那样观测资源的使用情况。 类摘要:[cpp] view plaincopyt.........【阅读全文】

阅读(1872) | 评论(0) | 转发(0)

发布时间:2014-10-30 14:59:33

shared_from_this()在一个类中需要传递类对象本身shared_ptr的地方使用shared_from_this函数来获得指向自身的shared_ptr,它是enable_shared_from_this的成员函数,返回shared_ptr。首先需要注意的是:这个函数仅在shared_ptr的构造函数被调用之后才能使用。原因是enable_shared_from_this::weak_ptr并不在enable.........【阅读全文】

阅读(1928) | 评论(0) | 转发(0)

发布时间:2014-10-30 09:09:12

——更新于2011/7/19,目前我已对boost的安装和使用有了新的认识,因此也会对两年前写的这篇文章做大幅修改,网上转载版本泛滥,请以本文为准。——更新于2013/3/20,增加ARM Linux下的编译配置方法。 理论上,本文适用于boost的各个版本,尤其是最新版本1.48.0;适用于各种C++编译器,如VC6.0(部分库不支.........【阅读全文】

阅读(3926) | 评论(0) | 转发(0)

发布时间:2014-10-29 21:53:45

Tortoise SVN使用方法,简易图解        刚到公司实习,为了版本控制,我公司使用SVN控制版本,在此记下SVN使用方法,仅供参考!        废话少说,上图!-------------------------------------------------------我是分割线-------------------.........【阅读全文】

阅读(1588) | 评论(0) | 转发(0)

发布时间:2014-10-29 20:32:07

在类中,有两个与众不同的成员函数,那就是构造函数和析构函数。当构造函数与析构函数遭遇继承和多态,它们的运行状况又会出现什么变化呢?多态性是在父类或各子类中执行最合适成员函数。一般来说,只会选择父类或子类中的某一个成员函数来执行。这可给析构函数带来了麻烦!如果有的资源是父类的构造函数申请的,有的资源.........【阅读全文】

阅读(1500) | 评论(0) | 转发(0)

发布时间:2014-10-25 16:23:02

服务器的创建分为两个步骤:1、建立socket;2、创建线程。两点内容的细节:1、建立socket方面:socket()bind()listen()accept()read()write()close()//关闭套接字时候在线程中关闭,而且只需关闭一次,在父进程中无须关闭socket,这一点不同于fork创建的进程。相关的套接字API如上所示。2、创建线程方面.........【阅读全文】

阅读(1750) | 评论(0) | 转发(0)
给主人留下些什么吧!~~

tianyashuibin2014-12-08 11:22

Oscarzhao:c++11 中貌似可以

嗯,是的,在c++11中可以

下面是在gcc的编译结果:
test_struct.cc:8:11: warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11 [enabled by default]
   int a = 1;
           ^

回复  |  举报

Oscarzhao2014-11-26 20:12

tianyashuibin:除了静态数据成员外,数据成员不能在类体内显式的初始化

举个最简单例子
struct a

  int a=1;
  int b=2;
};
这也不能通过啊!
原因很简单,因为struct a此时只是在说明有这么个类型,而并没有定义一个具体的变量和分配内存空间

c++11 中貌似可以

回复  |  举报

tianyashuibin2014-10-23 21:57

除了静态数据成员外,数据成员不能在类体内显式的初始化

举个最简单例子
struct a

  int a=1;
  int b=2;
};
这也不能通过啊!
原因很简单,因为struct a此时只是在说明有这么个类型,而并没有定义一个具体的变量和分配内存空间

回复  |  举报

tianyashuibin2014-10-23 21:39

1.分配内存,调用构造函数时,隐式/显示的初始化各数据成员
2.进入构造函数后在构造函数中执行一般计算
  1.类里面的任何成员变量在定义时是不能初始化的。
  2.一般的数据成员可以在构造函数中初始化。
  3.const数据成员必须在构造函数的初始化列表中初始化。
  4.static要在类的定义外面初始化。   
  5.数组成员是不能在初始化列表里初始化的。
  6.不能给数组指定明显的初始化。  
这6条一起,说明了一个问题:C++里面是不能定义常量数组的!因为3和5的矛盾。

回复  |  举报

tianyashuibin2014-10-23 21:32

记住静态成员这样初始化:
C/C++ code

class A
{
public:
   static const int a[3];
};
 
const int A::a[3] = {1,2,3};

回复  |  举报
留言热议
请登录后留言。

登录 注册