轮询算法是一个比较耗费CPU资源的方法,因为总要不停的来问才行。在低级IO的时候,往往CPU是等一段时间就查看控制总线是否已经被置为可读可写,其实这就是一个轮询的例子。
为什么要轮询呢,是因为你不知道对方是否已经到了想要的那个状态(比如数据已经就绪)。而你必须要等到那个状态才能继续。所以,要定一个定时器,时间到了,就来查看一些状态。
Example 1:
MTK平台检查SOCKET是否已经连接上。因为Soc_Connect接口是异步非阻塞的,所以一般会直接WOULDBLOCK住,这个时候,要启动一个TIMER,每隔N毫秒就来调用Soc_GetSate来查看是否已经连接到对应的服务器上。如果连接上了,才可以继续做发请求这样的操作。
Example 2:
select函数。应用程序要不停的调用SELECT函数来得到当前SOCKET是否已经可以读写。大家可以百度SELECT的用法,这里不多说了。
因为轮询算法比较耗资源,所以大家往往会想一些替代方案,比如NOTIFY机制。在BREW平台里,对一些异步操作,往往可以注册一个回调函数进去,等就绪了或者有结果了,会直接调回来。这样,应用就只需要傻傻等待就可以啦。
为什么要轮询呢,是因为你不知道对方是否已经到了想要的那个状态(比如数据已经就绪)。而你必须要等到那个状态才能继续。所以,要定一个定时器,时间到了,就来查看一些状态。
Example 1:
MTK平台检查SOCKET是否已经连接上。因为Soc_Connect接口是异步非阻塞的,所以一般会直接WOULDBLOCK住,这个时候,要启动一个TIMER,每隔N毫秒就来调用Soc_GetSate来查看是否已经连接到对应的服务器上。如果连接上了,才可以继续做发请求这样的操作。
Example 2:
select函数。应用程序要不停的调用SELECT函数来得到当前SOCKET是否已经可以读写。大家可以百度SELECT的用法,这里不多说了。
因为轮询算法比较耗资源,所以大家往往会想一些替代方案,比如NOTIFY机制。在BREW平台里,对一些异步操作,往往可以注册一个回调函数进去,等就绪了或者有结果了,会直接调回来。这样,应用就只需要傻傻等待就可以啦。