Symbian OS sockets API
2010-07-22 01:42:00 来源:WEB开发网接受数据(因为我们并不知道有多少数据要发送过来,所以这个过程是异步的)
发出数据(因为对于应用程序层来说,我们并不知道底层的硬件需要多长时间才能够将数据发出,所以这个过程也是异步的)
其他,比如载入协议模块之类的,看似并不是十分明显的异步操作
因为我们需要在应用程序中处理这些异步事件,所以我们需要用到Symbian OS的活动对象(Active objects, AOs)来解决这些问题。
活动对象的特点有:
使得应用程序开发者可以很容易的控制对象的生存周期
在一个单线程程序中完成并非严格意义上的多任务操作
为Symbian系统提供了效率较高的单线程多任务解决方案,而并不是真正地使用多线程。
在Symbian系统中,所有的线程都是通过一个或者多个活动对象,使用一个激活的进度管理器来进行高效率的外部事件处理。
一个活动对象,在一个时间内只能处理一个事件源。在实际情况中,活动对象通常也都是被设计为处理一类特定事件的。
在稍后的代码示例中,这些代码因为有不同的需求所以使用了不止一个活动对象,无论是客户端还是服务器程序,都使用了不止三个活动对象。其中一个用来处理连接机制,一个用来接收数据,另外一个用来发送数据。
下面我们就来看看如合利用活动对象来处理客户端和服务器之间进行socket流式连接的范例。
代码示例: 连接sockets
下面一部分就是借助代码的演示来向大家说明如何利用活动对象进行socket连接。这写代码段是从一个进行监听接入连接的‘服务器’和发送连接请求到服务器的‘客户端’程序中提取出来的。
服务‘监听’类的定义
下面的代码是从一个完整的进行‘监听’(listening)的服务器类定义中取出的一部分。
class CModel : public CActive { public: void StartEngineL(void); private: void RunL(void); void DoCancel (void); private: RSocketServ iSession; RSocket iListen, iSocket; CRx* iRxAO; // 用于接收数据的活动对象 CTx* iTxAO; // 用于发送数据的活动对象 };
请注意,在成员变量中有两个socket,一个是用来监听和连接的,而另外一个是用来处理和客户端之间进行数据的传输的。
在这个类的定义中,还有两个活动对象,他们是iRxAO和iTxAO。这两个活动对象用来在连接到服务之后异步地、分别地处理数据的发送和接收工作。
更多精彩
赞助商链接