<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[程序点滴]]></title><description><![CDATA[携子之手，共建美好明天]]></description><link>https://blog.csdn.net/maxcode</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; maxcode]]></copyright><item><title><![CDATA[android sdk 3.0 download ]]></title><link>https://blog.csdn.net/maxcode/article/details/6284718</link><guid>https://blog.csdn.net/maxcode/article/details/6284718</guid><author>maxcode</author><pubDate>Mon, 28 Mar 2011 22:20:00 +0800</pubDate><description><![CDATA[<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 /> ]]></description><category></category></item><item><title><![CDATA[[ACE程序员教程笔记]ACE_Connector使用一个连接多个线程发送数据]]></title><link>https://blog.csdn.net/maxcode/article/details/6126551</link><guid>https://blog.csdn.net/maxcode/article/details/6126551</guid><author>maxcode</author><pubDate>Mon, 10 Jan 2011 12:03:00 +0800</pubDate><description><![CDATA[<br />本例中我们采用多个线程向服务器发送数据，但只是用一个连接。客户端与服务器建立连接后调用open方法，在此方法中启动TRD_NUM个数的线程，每一个线程函数获取自己线程的ID，并组成字符串小写的一部分发送给服务器。服务器程序采用可以处理接收请求，并进行显示的服务器即可，如ACEAcceptorInputHandler.exe<br />例子程序使用activate方法，激活指定书目的线程函数。<br />#include "stdafx.h"
#include "ace/Connector.h"]]></description><category></category></item><item><title><![CDATA[[ACE程序员教程笔记]使用ACE_Connector连接服务器]]></title><link>https://blog.csdn.net/maxcode/article/details/6126400</link><guid>https://blog.csdn.net/maxcode/article/details/6126400</guid><author>maxcode</author><pubDate>Mon, 10 Jan 2011 11:04:00 +0800</pubDate><description><![CDATA[<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]]></description><category></category></item><item><title><![CDATA[[ACE程序员教程笔记]使用ACE_Acceptor建立连接并处理连接请求]]></title><link>https://blog.csdn.net/maxcode/article/details/6126328</link><guid>https://blog.csdn.net/maxcode/article/details/6126328</guid><author>maxcode</author><pubDate>Mon, 10 Jan 2011 10:40:00 +0800</pubDate><description><![CDATA[<br />本例中实现了Accept功能和输入事件处理功能。在与客户端连接建立成功之后，程序向Reactor注册输入回调事件处理函数。当客户端发送的数据到达时，此事件处理函数负责接收数据，并将其内容显示到输入设备。<br />由于ACE_Svc_Handle继承于ACE_Event_Handle，因此对事件处理只需要添加handle_input函数即可实现。<br />#include "stdafx.h"
#include "ace/Reactor.h"
#include "ace/Svc_Handl]]></description><category></category></item><item><title><![CDATA[[ACE程序员教程笔记]使用ACE_Acceptor分离连接和事件处理]]></title><link>https://blog.csdn.net/maxcode/article/details/6126285</link><guid>https://blog.csdn.net/maxcode/article/details/6126285</guid><author>maxcode</author><pubDate>Mon, 10 Jan 2011 10:23:00 +0800</pubDate><description><![CDATA[<br />ACE_Acceptor为一个抽象工厂，采用了客户端连接与服务处理程序分离的方式，开发人员可以分别关注两个不同的处理点，客户端连接处理与服务器处理程序都可以采用多种的方式，每一个客户端连接的处理与服务处理程序都可以实现适配。下文中的代码实现了服务器监听功能，当与客户端建立连接请求时，服务程序回调open方法，显示连接状态。<br />#include "stdafx.h"
#include "ace/Reactor.h"
#include "ace/Svc_Handler.h"
#incl]]></description><category></category></item><item><title><![CDATA[[ACE程序员教程笔记]使用Reactor实现Accept和数据读取]]></title><link>https://blog.csdn.net/maxcode/article/details/6125717</link><guid>https://blog.csdn.net/maxcode/article/details/6125717</guid><author>maxcode</author><pubDate>Sun, 09 Jan 2011 20:51:00 +0800</pubDate><description><![CDATA[<br />ACE_Reactor实现了操作系统多路复用和应用层事件处理。本文例子程序实现Acceptor事件和输入事件两个处理类，两个处理类均采用手动的方式进行卸载处理对象。<br />
Acceptor事件处理类，此类监听ACCEPT事件，当有客户端的连接请求时，触发handle_input函数，在此函数中将创建输入事件对象，并进行注册。<br />/*
*处理客户端的连接请求
*/
class AcceptHandler : public ACE_Event_Handler
{
publi]]></description><category></category></item><item><title><![CDATA[[ACE程序员教程笔记]使用Reactor处理信号]]></title><link>https://blog.csdn.net/maxcode/article/details/6125705</link><guid>https://blog.csdn.net/maxcode/article/details/6125705</guid><author>maxcode</author><pubDate>Sun, 09 Jan 2011 20:39:00 +0800</pubDate><description><![CDATA[<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]]></description><category></category></item><item><title><![CDATA[[ACE程序员教程笔记]将同步方法转换为异步方法]]></title><link>https://blog.csdn.net/maxcode/article/details/6125089</link><guid>https://blog.csdn.net/maxcode/article/details/6125089</guid><author>maxcode</author><pubDate>Sun, 09 Jan 2011 11:53:00 +0800</pubDate><description><![CDATA[<br />对于比较耗时的处理（如IO操作），如果采用同步的调用方式，程序则会阻塞在当前调用的函数上，无法进行其它的操作，造成时间浪费，ACE提供了方法对象(ACE_Method_Object)，可以实现将同步方法转换为异步方法的机制，下文中将以打印服务为例介绍如何将同步方法转换为异步调用的方法。<br />此方案采用了多线程处理的方式，将原来的类方法作为一个方法对象(ACE_Method_Object)，每一次函数的调用都会创建一个方法对象，之后会将此方法对象加入到活动队列(activation queu]]></description><category></category></item><item><title><![CDATA[[ACE程序员教程笔记]Task间通讯]]></title><link>https://blog.csdn.net/maxcode/article/details/6124976</link><guid>https://blog.csdn.net/maxcode/article/details/6124976</guid><author>maxcode</author><pubDate>Sun, 09 Jan 2011 09:45:00 +0800</pubDate><description><![CDATA[<br />Task可以视为更高一个级别的线程对象，各个Task之间的同学也就是线程之间的通讯，在ACE中，采用了消息队列的方式进行处理。每一个Task封装一个ACE_Message_Queue，对于这个消息队列使用putq将消息压入队列，采用getq将消息出列，获取消息的顺序与压入消息的顺序相同。<br />下面的代码使用了消息队列在两个Task之间进行通讯，GenerateData任务生成数据，每间隔1秒钟会将全局变量g_nCounter增1，并将其压入队列。PrintTask任务从消息队列中获取消息，]]></description><category></category></item><item><title><![CDATA[[ACE程序员教程笔记]使用ACE_Thread_Manager创建线程组]]></title><link>https://blog.csdn.net/maxcode/article/details/6124732</link><guid>https://blog.csdn.net/maxcode/article/details/6124732</guid><author>maxcode</author><pubDate>Sat, 08 Jan 2011 22:02:00 +0800</pubDate><description><![CDATA[<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.]]></description><category></category></item><item><title><![CDATA[[ACE程序员教程笔记]使用ACE_Guard访问子线程]]></title><link>https://blog.csdn.net/maxcode/article/details/6124340</link><guid>https://blog.csdn.net/maxcode/article/details/6124340</guid><author>maxcode</author><pubDate>Sat, 08 Jan 2011 16:50:00 +0800</pubDate><description><![CDATA[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;]]></description><category></category></item><item><title><![CDATA[[ACE程序员教程笔记]使用ACE_Thread_Mutex访问子线程中的数据]]></title><link>https://blog.csdn.net/maxcode/article/details/6124283</link><guid>https://blog.csdn.net/maxcode/article/details/6124283</guid><author>maxcode</author><pubDate>Sat, 08 Jan 2011 16:24:00 +0800</pubDate><description><![CDATA[<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]]></description><category></category></item><item><title><![CDATA[[ACE程序员教程笔记]使用ACE_Thread创建多个线程]]></title><link>https://blog.csdn.net/maxcode/article/details/6124254</link><guid>https://blog.csdn.net/maxcode/article/details/6124254</guid><author>maxcode</author><pubDate>Sat, 08 Jan 2011 16:08:00 +0800</pubDate><description><![CDATA[<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.]]></description><category></category></item><item><title><![CDATA[[ACE程序员教程笔记]UDP数据发送客户端]]></title><link>https://blog.csdn.net/maxcode/article/details/6123970</link><guid>https://blog.csdn.net/maxcode/article/details/6123970</guid><author>maxcode</author><pubDate>Sat, 08 Jan 2011 11:21:00 +0800</pubDate><description><![CDATA[<br />采用UDP无连接方式，客户端向指定的服务器的特定端口连续发送10次数据<br />/*
*UDP数据发送客户端
*客户端通过指定接收端的IP和端口号直接向打印服务器发送数据
*ACE_INET_Addr的构造采用“端口号，主机”的方式
*本地端口采用0，自动选择
*发送数据长度为10字节，每间隔1秒发送一次
*/
class UDPClient
{
public:
	//构造UDP数据发送客户端
	UDPClient(char* szHost,int nPort):
	 ]]></description><category></category></item><item><title><![CDATA[[ACE程序员教程笔记]UDP数据接收服务器]]></title><link>https://blog.csdn.net/maxcode/article/details/6123968</link><guid>https://blog.csdn.net/maxcode/article/details/6123968</guid><author>maxcode</author><pubDate>Sat, 08 Jan 2011 11:19:00 +0800</pubDate><description><![CDATA[<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]]></description><category></category></item><item><title><![CDATA[[ACE程序员教程笔记]单线程串行客户端]]></title><link>https://blog.csdn.net/maxcode/article/details/6122021</link><guid>https://blog.csdn.net/maxcode/article/details/6122021</guid><author>maxcode</author><pubDate>Fri, 07 Jan 2011 10:48:00 +0800</pubDate><description><![CDATA[<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*]]></description><category></category></item><item><title><![CDATA[[ACE程序员教程笔记]单线程串行处理服务器]]></title><link>https://blog.csdn.net/maxcode/article/details/6121965</link><guid>https://blog.csdn.net/maxcode/article/details/6121965</guid><author>maxcode</author><pubDate>Fri, 07 Jan 2011 10:32:00 +0800</pubDate><description><![CDATA[使用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
/**
*接收客户端发送固定长度的文本]]></description><category></category></item><item><title><![CDATA[[NPWP笔记]自动生成子进程服务器]]></title><link>https://blog.csdn.net/maxcode/article/details/6101389</link><guid>https://blog.csdn.net/maxcode/article/details/6101389</guid><author>maxcode</author><pubDate>Mon, 27 Dec 2010 21:01:00 +0800</pubDate><description><![CDATA[<br />接上文《使用多进程处理客户请求》中描述，由于它存在严重的问题---超过当前的服务线程时，程序将不再进行处理。本文中结合之前的fork技术对其进行完善，主要的修改内容是如何新增子进程和如何删除子进程。新增子进程是在当前的所有子进程都在处理客户的请求时又有新的子进程的请求到达；删除子进程是在空闲的子进程过多时，为了释放系统资源。这两个值成为服务阈值（下阈值和上阈值）。<br />父进程如何能够得知当前子进程的个数及其状态呢？父子进程将采用管道进行通信。<br />#............
use]]></description><category></category></item><item><title><![CDATA[[NPWP笔记]使用多进程处理客户请求]]></title><link>https://blog.csdn.net/maxcode/article/details/6098107</link><guid>https://blog.csdn.net/maxcode/article/details/6098107</guid><author>maxcode</author><pubDate>Sat, 25 Dec 2010 17:21:00 +0800</pubDate><description><![CDATA[之前《Develop a multi-process server with perl》中描述了采用都进程处理客户端的请求，监听Socket一直处于accept状态，当有客户端的请求到达时，服务器创建一个子进程，后续对客户端的请求处理全部交由此子进程。这种用法会导致频繁的创建与关闭子进程，影响服务器的性能，尤其是在大并发的情况下显得更为严重。     本文中依旧采用多线程处理客户端的请求，与上次的多进程不同的是，我们预先创建指定数目的子进程，每一个客户端的连接请求到来时，不在需要创建子进程（预先已经创建好了]]></description><category></category></item><item><title><![CDATA[[NPWP笔记]非阻塞文件读取]]></title><link>https://blog.csdn.net/maxcode/article/details/6097593</link><guid>https://blog.csdn.net/maxcode/article/details/6097593</guid><author>maxcode</author><pubDate>Sat, 25 Dec 2010 11:46:00 +0800</pubDate><description><![CDATA[非阻塞文件读取]]></description><category></category></item></channel></rss>