当前位置:主页 > 网页教程 > 网页制作 > wap网站教程 > 内容欢迎大家投稿

WAP建站入门教程九、定时器

时间:2009-10-03 08:26来源:未知 作者:大宝库 点击:读取中
阅读工具:字体:
介绍了如何使用定时器来实现动态刷新
    WML中的ontimer事件有着很重要的意义。在实现自动刷新和动画方面很有用处。下面就要讲述如何使用ontimer事件来实现一个自动刷新的时钟程序。
    在实现自动刷新的过程中一个十分重要的问题就是Cache。Cache在WAP中有很重要的作用,但是同时它也给程序编制人员带来了很多不方便。例如:当我反复地查询同一支股票信息的时候,如果不采取防止Cache的方法,那么结果只能是一个。这显然是不正确的。那么如何防止这种情况发生呢?在WAP问答中有详细的解答。但是这里将采用一种最简单的办法,那就是使得用户所产生的URL请求没有一次是相同的。即使出现相同,那么手机的内存无法保留那么多的页面内容。
    时钟的例子程序如下:(需要注意到WML页面和动态生成程序)
Main.wml

<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<card id="main" ontimer="http://127.0.0.1/wap/wapd.dll?GetTime?ID=100" title="Main">
    <timer name="wait1" value="60"/>
    <p>
        Wait for a moment...
    </p>
</card>
</wml>
    动态时钟程序的核心:
void CWAPExtension::GetTime(CHttpServerContext* pCtxt,int nID)
{
    AddHeader(pCtxt,"Content-type: text/vnd.wap.wml\n\n");

    *pCtxt<<_T("<?xml version=\"1.0\"?>\n");
    *pCtxt<<_T("<!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN");
    *pCtxt<<_T("\" \"http://www.wapforum.org/DTD/wml_1.1.xml\">\n");
    *pCtxt<<_T("<wml>\n");

    CString strCard;
    strCard.Format(_T("<card id=\"time\" ontimer=\"http://127.0.0.1/wap/wapd.dll?GetTime?ID=%d\" title=\"Time\">\n"),++nID);
    *pCtxt<<(LPCTSTR)strCard;

    CString strWait;
    strWait.Format(_T("<timer name=\"wait%d\" value=\"60\"/>"),nID);
    *pCtxt<<(LPCTSTR)strWait;

    *pCtxt<<_T(" <p>\n");

    CTime tmCurrent=CTime::GetCurrentTime();
    *pCtxt<<(LPCTSTR)tmCurrent.Format(_T("%Y-%m-%d\n"));
    *pCtxt<<(LPCTSTR)tmCurrent.Format(_T("%H:%m:%S\n"));

    *pCtxt<<_T(" </p>\n");
    *pCtxt<<_T(" </card>\n");
    *pCtxt<<_T("</wml>");
}
    我们注意到nID在不断增加,那么就意味着nID就不可能相同。那么每次的URL就不会相同,手机每次必须去服务器取回内容。大家同时也注意到了ontimer的name怎么也在不断地改变呢?这个是一个很有意思的事情:在UpPhone和Nokia WAP Toolkit 1.2中,如果不改变这个ID,那么就只出现一次刷新,这是为什么呢?很简单,他们将timer这个变量做为全局变量保存了下来,再下一次进来的时候,忘记将timer的value重新赋值了。但是这也不是一个最好的解决办法。你会发现UpPhone在运行128次后就死掉了。为什么?因为每次不同,它都作为全局的timer,因此最多只能有128个timer。怎么办呢?最好的程序在下面:
void CWAPExtension::GetNext(CHttpServerContext* pCtxt,int nID)
{
    nID=nID%67+1;

    AddHeader(pCtxt,"Content-type: text/vnd.wap.wml\n\n");

    *pCtxt<<_T("<?xml version=\"1.0\"?>\n");
    *pCtxt<<_T("<!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN");
    *pCtxt<<_T("\" \"http://www.wapforum.org/DTD/wml_1.1.xml\">\n");
    *pCtxt<<_T("<wml>\n");
    *pCtxt<<_T("<card id=\"humor\" title=\"Picture\">\n");
    *pCtxt<<_T(" <onevent type=\"ontimer\">\n");
    CString strGoTo;
    strGoTo.Format(_T(" <go href=\"http://127.0.0.1/wap/wap.dll?GetNext?ID=%d\">\n"),nID);
    *pCtxt<<(LPCTSTR)strGoTo;
    *pCtxt<<_T(" <setvar name=\"wait\" value=\"150\"/>\n");
    *pCtxt<<_T(" </go>\n");
    *pCtxt<<_T(" </onevent>");
    *pCtxt<<_T(" <timer name=\"wait\" value=\"150\"/>");(责任编辑:大宝库)


------分隔线----------------------------
推荐内容
  • WAP手机上网问题问与答

    一、我如何键入网址? 1、打开手机,进入服务功能选项 2、按下确定键 3、选中书签 4、...

  • WML语法大全

    WML是一种基于XML(扩展标记语言)的一种标记语言。这种语言是为无线设备用户提供交互...

  • 全面解析WAP技术

    什么是WAP WAP就是无线应用协议(WirelessApplicationProtocol)的简称。虽然它跟联合国...

  • 用QuickWAP组件建设Wap站点

    用QuickWAP组件建设Wap站点教程-准备篇 首先我们要简单了解一下什么是QuickWAP,Quick...

赞助商链接
赞助商链接