- 博客(67)
- 资源 (4)
- 收藏
- 关注
原创 android sdk 3.0 download
<br />linux sdk:http://dl.google.com/android/android-sdk_r10-linux_x86.tgz<br />window sdk:http://dl.google.com/android/android-sdk_r10-windows.zip<br />ADT:http://dl-ssl.google.com/android/ADT-10.0.0.zip<br />
2011-03-28 22:20:00
1040
原创 [ACE程序员教程笔记]ACE_Connector使用一个连接多个线程发送数据
<br />本例中我们采用多个线程向服务器发送数据,但只是用一个连接。客户端与服务器建立连接后调用open方法,在此方法中启动TRD_NUM个数的线程,每一个线程函数获取自己线程的ID,并组成字符串小写的一部分发送给服务器。服务器程序采用可以处理接收请求,并进行显示的服务器即可,如ACEAcceptorInputHandler.exe<br />例子程序使用activate方法,激活指定书目的线程函数。<br />#include "stdafx.h"#include "ace/Connector.h"
2011-01-10 12:03:00
2053
原创 [ACE程序员教程笔记]使用ACE_Connector连接服务器
<br />与ACE_Acceptor相同,它实现的是连接与数据处理的分离。同样也是继承于ACE_Svc_Handler类,当连接成功后,Reactor会自动的回调open方法,注意本例中的SvcHandle与Acceptor中的事件处理是相同的,所修改的只是连接部分,这恰恰说明了连接与数据处理分离的优点。<br />#include "stdafx.h"#include "ace/Connector.h"#include "ace/Reactor.h"#include "ace/Svc_Han
2011-01-10 11:04:00
4692
原创 [ACE程序员教程笔记]使用ACE_Acceptor建立连接并处理连接请求
<br />本例中实现了Accept功能和输入事件处理功能。在与客户端连接建立成功之后,程序向Reactor注册输入回调事件处理函数。当客户端发送的数据到达时,此事件处理函数负责接收数据,并将其内容显示到输入设备。<br />由于ACE_Svc_Handle继承于ACE_Event_Handle,因此对事件处理只需要添加handle_input函数即可实现。<br />#include "stdafx.h"#include "ace/Reactor.h"#include "ace/Svc_Handl
2011-01-10 10:40:00
2783
原创 [ACE程序员教程笔记]使用ACE_Acceptor分离连接和事件处理
<br />ACE_Acceptor为一个抽象工厂,采用了客户端连接与服务处理程序分离的方式,开发人员可以分别关注两个不同的处理点,客户端连接处理与服务器处理程序都可以采用多种的方式,每一个客户端连接的处理与服务处理程序都可以实现适配。下文中的代码实现了服务器监听功能,当与客户端建立连接请求时,服务程序回调open方法,显示连接状态。<br />#include "stdafx.h"#include "ace/Reactor.h"#include "ace/Svc_Handler.h"#incl
2011-01-10 10:23:00
2727
原创 [ACE程序员教程笔记]使用Reactor实现Accept和数据读取
<br />ACE_Reactor实现了操作系统多路复用和应用层事件处理。本文例子程序实现Acceptor事件和输入事件两个处理类,两个处理类均采用手动的方式进行卸载处理对象。<br />Acceptor事件处理类,此类监听ACCEPT事件,当有客户端的连接请求时,触发handle_input函数,在此函数中将创建输入事件对象,并进行注册。<br />/**处理客户端的连接请求*/class AcceptHandler : public ACE_Event_Handler{publi
2011-01-09 20:51:00
1981
原创 [ACE程序员教程笔记]使用Reactor处理信号
<br />本例演示了使用ACE_Reactor处理信号的方法,主要有三个个关键步骤:<br />1.编写信号处理函数,针对感兴趣的信号进行处理。<br />2.将此信号处理对象注册到Reactor中。<br />3.启动Reactor的事件处理循环。<br />下面的代码演示了在程序运行时按下“Ctrl+C”和“Ctrl+Break"是的处理结果。<br />#include "stdafx.h"#include "ace/Reactor.h"#include "ace/Event_Handler
2011-01-09 20:39:00
1236
原创 [ACE程序员教程笔记]将同步方法转换为异步方法
<br />对于比较耗时的处理(如IO操作),如果采用同步的调用方式,程序则会阻塞在当前调用的函数上,无法进行其它的操作,造成时间浪费,ACE提供了方法对象(ACE_Method_Object),可以实现将同步方法转换为异步方法的机制,下文中将以打印服务为例介绍如何将同步方法转换为异步调用的方法。<br />此方案采用了多线程处理的方式,将原来的类方法作为一个方法对象(ACE_Method_Object),每一次函数的调用都会创建一个方法对象,之后会将此方法对象加入到活动队列(activation queu
2011-01-09 11:53:00
1602
原创 [ACE程序员教程笔记]Task间通讯
<br />Task可以视为更高一个级别的线程对象,各个Task之间的同学也就是线程之间的通讯,在ACE中,采用了消息队列的方式进行处理。每一个Task封装一个ACE_Message_Queue,对于这个消息队列使用putq将消息压入队列,采用getq将消息出列,获取消息的顺序与压入消息的顺序相同。<br />下面的代码使用了消息队列在两个Task之间进行通讯,GenerateData任务生成数据,每间隔1秒钟会将全局变量g_nCounter增1,并将其压入队列。PrintTask任务从消息队列中获取消息,
2011-01-09 09:45:00
1192
原创 [ACE程序员教程笔记]使用ACE_Thread_Manager创建线程组
<br />ACE_Thread_Manager为ACE_Thread的高级类,使用此接口可以实现对线程进行分组管理,下面将对两个不同的业务处理采用两种不同的处理方式:一个用于回显内容,另一个用于打印内容。<br />#include "stdafx.h"#include "ace/ace.h"#include "ace/Thread.h"#include "ace/Synch.h"#include "ace/Log_Msg.h"#include "ace/Thread_Manager.
2011-01-08 22:02:00
3271
原创 [ACE程序员教程笔记]使用ACE_Guard访问子线程
ACE_Guard提供了自动锁定、释放机制的同步锁,对可见的scope范围内进行自动加锁,当超出scope范围是程序自动卸锁。Guard需要与一个ACE_LOCK的类作为模板,本例中采用了ACE_Thread_Mutex实现,见代码。#include "ace/ace.h"#include "ace/Thread.h"#include "ace/Synch.h"#include "ace/Log_Msg.h"ACE_Thread_Mutex tmGuard;int g_nCounter;
2011-01-08 16:50:00
6220
原创 [ACE程序员教程笔记]使用ACE_Thread_Mutex访问子线程中的数据
<br />每一个子线程中会对全局变量g_nCounter进行递增三次,使用Mutex保证在同一时刻只能有一个线程递增、输出这个值,因此,实现了数据处理的串行化,每一次子函数的输出必定是完整的3次,不会导致输出结果混乱的情况。<br />#include "stdafx.h"#include "ace/ace.h"#include "ace/Thread.h"#include "ace/Synch.h"#include "ace/Log_Msg.h"ACE_Thread_Mutex tm
2011-01-08 16:24:00
2082
原创 [ACE程序员教程笔记]使用ACE_Thread创建多个线程
<br />ACE_Thread采用轻量级的线程包转实现了在多个操作系统之间线程编程的统一化,方便了跨平台开发的开发工作。<br />下面的代码实现了创建100个子线程,在每一个子线程函数中打印出自己线程对应的线程ID,当所有的子线程处理完成之后,主线程才可以退出整个应用程序。<br />#include "stdafx.h"#include "ace/ace.h"#include "ace/Log_Msg.h"#include "ace/Thread.h"#include "ace/OS.
2011-01-08 16:08:00
2292
原创 [ACE程序员教程笔记]UDP数据发送客户端
<br />采用UDP无连接方式,客户端向指定的服务器的特定端口连续发送10次数据<br />/**UDP数据发送客户端*客户端通过指定接收端的IP和端口号直接向打印服务器发送数据*ACE_INET_Addr的构造采用“端口号,主机”的方式*本地端口采用0,自动选择*发送数据长度为10字节,每间隔1秒发送一次*/class UDPClient{public: //构造UDP数据发送客户端 UDPClient(char* szHost,int nPort):
2011-01-08 11:21:00
1606
原创 [ACE程序员教程笔记]UDP数据接收服务器
<br />采用UDP方式实现数据接收功能,与TCP接收服务器功能一致。但没有accep和listen操作。<br />#include "stdafx.h"#include "ace/ace.h"#include "ace/SOCK_Dgram.h"#include "ace/INET_Addr.h"#include "ace/Log_Msg.h"#include "ace/OS.h"#define BUF_SIZE 11/**UDP数据接收端*此程序负责接收来自UDP
2011-01-08 11:19:00
1111
原创 [ACE程序员教程笔记]单线程串行客户端
<br />#include "stdafx.h"#include "ace/ace.h"#include "ace/Log_Msg.h"#include "ace/Sock_Connector.h"#include "ace/Sock_Stream.h"#include "ace/OS.h"/**向打印服务器发送固定长度的文本内容*每一次连接成功后,向服务器发送10次固定长度的文本内容*/class Client{public: Client(char*
2011-01-07 10:48:00
905
原创 [ACE程序员教程笔记]单线程串行处理服务器
使用ACE的被动连接方式实现服务器打印功能。服务器采用单线串行处理方式逐个处理客户端的连接请求,连接成功后,服务器从客户端接收10个字符长度的内容,并将其显示在服务器。#include "stdafx.h"#include "ace/ace.h"#include "ace/SOCK_Acceptor.h"#include "ace/SOCK_Stream.h"#include "ace/Log_Msg.h"#define DATA_LEN 10/***接收客户端发送固定长度的文本
2011-01-07 10:32:00
944
原创 [NPWP笔记]自动生成子进程服务器
<br />接上文《使用多进程处理客户请求》中描述,由于它存在严重的问题---超过当前的服务线程时,程序将不再进行处理。本文中结合之前的fork技术对其进行完善,主要的修改内容是如何新增子进程和如何删除子进程。新增子进程是在当前的所有子进程都在处理客户的请求时又有新的子进程的请求到达;删除子进程是在空闲的子进程过多时,为了释放系统资源。这两个值成为服务阈值(下阈值和上阈值)。<br />父进程如何能够得知当前子进程的个数及其状态呢?父子进程将采用管道进行通信。<br />#............use
2010-12-27 21:01:00
3558
原创 [NPWP笔记]使用多进程处理客户请求
之前《Develop a multi-process server with perl》中描述了采用都进程处理客户端的请求,监听Socket一直处于accept状态,当有客户端的请求到达时,服务器创建一个子进程,后续对客户端的请求处理全部交由此子进程。这种用法会导致频繁的创建与关闭子进程,影响服务器的性能,尤其是在大并发的情况下显得更为严重。 本文中依旧采用多线程处理客户端的请求,与上次的多进程不同的是,我们预先创建指定数目的子进程,每一个客户端的连接请求到来时,不在需要创建子进程(预先已经创建好了
2010-12-25 17:21:00
5990
原创 [NPWP笔记]multiplexed服务器
服务器采用单线程处理,通过multiplexed监听网络IO,如果有新的客户连接请求,将其加入到select监听;当客户的请求处理完毕之后,从其从select监听中删除。use strict;use warnings;use IO::Socket;use IO::Select;my $host = "192.168.1.102";my $port = 27002;my %SESSION;my $socket = IO::Socket::INET->new(Listen =
2010-12-20 01:18:00
590
原创 [NPWP笔记]multiplexed客户端
使用multiplexed技术监听STDIN的可读数据,如果有数据可用,则将其读入到缓存中,之后通过syswrite写入到SOCKET。use strict;use warnings;use IO::Socket;use IO::Select;my $host = "192.168.1.102";my $port = 27002;my $socket = IO::Socket::INET->new("$host:$port") or die $@;my $readers
2010-12-19 23:48:00
671
原创 [NPWP笔记]多线程客户端
多线程客户端是对单线程客户端的扩展,在原有的基础之上使用了线程技术,SOCKET的创建与关闭都是在子线程中进行:子线程在创建时也创建一个SOCKET,在子线程退出时,将其关闭。这样,在线程并发的时候,产生多个SOCKET同时连接服务器的情景。#!/usr/bin/perluse 5.006;use strict;use warnings;use IO::Socket;use threads;my $host = "192.168.1.102";my $port = 270
2010-12-19 21:41:00
1130
原创 [NPWP笔记]多线程服务器
采用一个主线程负责接收来自客户端的连接请求,对于每一个客户端的请求,由以一个线程进行处理。这样客户的连接于客户的事务处理分别在不同的线程,主线程创建完成事务处理线程之后,将不再对其进行任何控制。事务处理线程负责来自客户端的请求,将接收到的内容显示到STDOUT。因为每一个客户的请求都会导致一个事务线程的创建与销毁,因此在效率上会有所影响。 #!/usr/bin/perluse 5.006;use strict;use warnings;use threads;use IO::Sock
2010-12-19 20:48:00
671
原创 [NPWP笔记]Write a FTP client with two-process model
There are two process in this script,one for send FTP command,and another is for receiving FTP server response.use strict;use warnings;use IO::Socket;use constant BUFSIZE => 1024;#I use FileZilla Server as FTP server on Windows 2003,use this script
2010-12-18 16:47:00
576
原创 [NPWP笔记]从管道中读取数据
使用后缀“|”操作实现从标准输入设备中读取内容。#!/usr/bin/perluse strict;my %who;open(WHOFH,"who |") or die "can not open who:$!";while(){ next unless /^(/S+)/; $who{$1}++;}foreach (sort{$who{$b} $who{$a}} keys %who){ printf "%10s %d/n",$_
2010-12-16 00:12:00
827
原创 [NPWP笔记]perl创建进程
根据PID判断当前运行的进程为主进程还是子进程,下面的代码在Linux平台可以正确运行。#!/usr/bin/perluse 5.006;use strict;use warnings;print "PID = $$/n";my $child = fork();die "can not fork:$!" unless defined $child;if($child > 0){ print "parent PID = $$,child PID = $child/n"
2010-12-15 23:55:00
811
原创 [NPWP笔记]perl函数使用文件句柄
在perl的函数定义中,如果使用文件句柄作为参数进行传递,请使用引用,而不要使用直接的变量赋值操作。原因是如果在其它包中引用这个函数,将导致文件句柄非法错误。use 5.006;use strict;use warnings;sub read_file { my $h = shift; my @lines = ; print @lines;}open(FH,"sub_read_file.pl") or die "can not open sub_read_f
2010-12-14 23:47:00
1299
1
原创 [NPWP笔记]使用perl循环读取标准输入设备
本程序使用perl循环读取标准输入设备(STDIN),直到输入的文本内容为“quit”字符串;use 5.006;use strict;use warnings;my $line;while(){ chomp; last if(/^quit$/i); print;}
2010-12-14 23:00:00
1075
原创 多线程Poco::Logger生成日志
<br />日志函数在多线程的环境下应该可以进行同步处理,多个线程同时向同一个日志文件进行日志输出时,每一次的日志记录应保持完整,即日志功能实现了同步处理。下面的例子采用Poco的多线程编程,每次启动200个子线程,各个子线程函数负责向日志文件中写入自己的日志内容。<br />包含文件和命名空间<br />#include "Poco/Thread.h"<br />#include "Poco/Runnable.h"<br />using Poco::Thread;<br />using Poco::Run
2010-12-05 17:58:00
4624
原创 使用Poco::Logger实现日志功能
<br />使用的Poco头文件及其对应的命名空间<br /> <br />#include "Poco/FormattingChannel.h"<br />#include "Poco/FileChannel.h"<br />#include "Poco/PatternFormatter.h"<br />using Poco::Message;<br />using Poco::PatternFormatter;<br />using Poco::FileChannel;<br />using Poco:
2010-12-05 16:17:00
5754
原创 ACE操作ini配置文件
配置文件(后缀为.ini)的文件主要用作配置程序启动时的一些参数配置,每一个配置行的格式为:name=valuename:配置参数名称value:配置参数的值=:配置分隔符 配置参数可以根据功能相关性对配置行进行分组,每一个组称为一个Section,Section没有显示的终止标识,一个新的Section的开始(或文件结束)即表示前一个Section的终止.下面为
2009-04-25 11:22:00
1872
原创 ACE获取时间信息
本文介绍了如何使用ACE框架中的ACE_Date_Time类和ACE_Time_Value类获取当前时间信息,内容包含年、月、日、时、分、秒和毫秒,这些信息在编程中会经常用到,故将其整理如下,功能很简单:每隔一秒获取当前的系统时间,打印到屏幕,同时也使用ACE_OS命名空间中的文件操作函数将其写入一文本文件,代码如下:#include #include #include #incl
2009-04-23 23:11:00
6452
原创 Linux共享库文件(so)用法
JCConvert已经在Windows上可以工作,下一步我将在Linux平台上实现这个功能。为了保证对Linux系统so文件理解无误,先在Linux平台上创建一个so文件,并使用测试程序进行测试,其目的就是确认自己的理解是否正确。第一步是如何生成一个so文件。1.生成包含文件SoTest.h,代码如下:#include using namespace std;#ifde
2009-04-20 23:33:00
3428
原创 汉字数目与阿拉伯数字转化之二
上一篇实现使用C++实现了汉字数目转化为阿拉伯数字的引擎,其接口仅能供c++语言使用,本文将在上一篇的基础上,将其转化为c语言可以使用的动态链接库,既可以供C++代码使用,又可以供C源代码使用,开发环境以VS2008为例,其它编译器的移植在后续的文章中逐步实现,包含文件内容修改为如下模样:// 下列 ifdef 块是创建使从 DLL 导出更简单的// 宏的标准方法。此 DLL 中的所有文件
2009-04-19 17:35:00
888
原创 汉字数目与阿拉伯数字转化之一
本文定义了汉字数目(一百二十三)转化为阿拉伯数字(123)数据结构及函数定义,本文使用了C++STL中的常用数据结构如集合(set)、映射(map)、向量(vector)和字符串(string)等,故提供的接口仅供C++开发人员使用,C语言开发人员需要再对其进行封装,剔除C++元素,在后文中介绍,先看一下包含文件是如何定义的。#ifndef __JCCHINESE_TO_NUM__
2009-04-19 16:45:00
1069
原创 ACE有界栈用法
ACE_Bound_Stack与标准库中stack用法比较#include void stack_test(){ //打印当前函数名称 ACE_DEBUG((LM_DEBUG,ACE_TEXT("%s/n"),__FUNCTION__)); //使用ACE有界栈 ACE_Bounded_Stack bs_int_stack(10); for (int i = 0;
2009-02-25 23:59:00
615
原创 ACE双向链表用法
演示了ACE双向链表与STD链表的用法// EchoServer.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include "ace/Containers.h"#include "ace/Log_Msg.h"#include using namespace std;int ACE_TMAIN(int argc, ACE_TC
2009-02-25 23:37:00
740
Visual.Studio.Tools.for.Office.Using.C.Sharp.with.Excel.Word.Outlook.and.InfoPath.Sep.2005.part2
2008-04-14
Visual.Studio.Tools.for.Office.Using.C.Sharp.with.Excel.Word.Outlook.and.InfoPath.Sep.2005
2008-04-14
Programming.Mobile.Devices.An.Introduction.for.Practitioners
2008-04-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人