Chinaunix首页 | 论坛 | 博客
  • 博客访问: 121152
  • 博文数量: 32
  • 博客积分: 2011
  • 博客等级: 大尉
  • 技术积分: 375
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-03 17:57
文章分类

全部博文(32)

文章存档

2011年(1)

2009年(8)

2008年(23)

我的朋友

分类:

2008-04-16 11:05:26

    几乎所有的API调用都需要传一个contxt作为第一个参数。一个context可以标示一个javascript引擎中的脚本。引擎吧context信息传给运行该脚本的线程。每个即时运行的脚本都学要被分配给一个唯一的context。当脚本完成运行后,它的context就没有用了,该context可以重新分配给其他新的脚本或者释放掉。
    为脚本创建一个新的context需要使用JS_NewContext.该函数需要连个参数:一个是指向与该context相关联的runtime的指针,另一个是分配给该context的栈空间的大小。如果创建成功,函数返回一个指向新创建的context的指针。与其关联的runtime必须已经存在了。分配的栈空间必须足够大来容纳该context中的脚本创建的任何变量或对象。注意:分配和维护一个context需要很多的额外开销,你应该:
    1.在你的应用程序中一次性创建适量的context。
    2.保持context,如果你的应用程序需要。而不是即时销毁,使用时再重建。
    当一个context不再被使用时,就要把它销毁并释放它占用的内存空间。根据你的应用程序中的js的作用域,你可以选择即时销毁context,或者把它保存到你的应用程序结束。在任何一种情况下,都需要调用JS_DestroyContext来释放不会再被用到的context。这个函数只有一个参数:指向要释放的context的指针。
JS_DestroyContext(cx);
    如果你的应用程序创建了很多个runtime,应用程序可能需要知道哪个runtime与哪个context相关联。这种情况下调用JS_GetRuntime,把context作为参数。JS_GetRuntime返回一个指向runtime的指针。
rt = JS_GetRuntime(cx);
    你可以在创建context时为使用该context的script的变量和对象的分配空间。你也可以为一个context存大量的数据,但是让你所需要的栈空间最小。调用JS_SetContextPrivate来创建一个指向该context私用的指针,调用JS_GetContextPrivate来获取指针以便来访问数据。你的应用程序负责创建和管理这些私有数据。
    创建私有数据,并把它与某个context关联。
    1.Establish the private data as you would a normal C void pointer variable.
    2.调用JS_SetContextPrivate, 并指出想创建私有数据的context,并且指出指向数据的指针。
例如
JS_GetContextPrivate(cx,pdata);
    如果想获取数据,调用JS_GetContextPrivate,并且把context做为参数传入。函数返回指向数据的指针。
 pdata = JS_GetContextPrivate(cx);



   
 

  
阅读(2166) | 评论(0) | 转发(0) |
0

上一篇:嵌入SpiderMonkey——JSAPI基础

下一篇:乱弹

给主人留下些什么吧!~~