轻盈小刀-LUA

突破C++的局限,让编程语言大同
随笔 - 13, 文章 - 1, 评论 - 13, 引用 - 0
数据加载中……

2012年2月3日

Htmlayout新Demo程序,简单的多页面浏览器

将IE控件加入进来,可以在Htmlayout页面中使用IE控件,为了验证相关功能,做了这个Demo程序。
实现以下功能:
1.加入可拖动按钮工具栏
2.带标签的浏览器
3.相同url地址只打开一个标签

其中页面分4部分,工具栏,地址框,标签页,浏览器。这四部分可以非常翻遍的变换显示位置,只需要修改css中以下相关部分
body 
  flow:  "toolbar"
         "addr"
         "tabs" 
         "page";
}
如果想用标签页放在底部,只需要将tabs和page调换位置即可,简单好用。

另外带一个标签页控件,在ctrl目录中,主要是为了验证面向控件开发,即可以单独做我们需要的控件,然后在页面中组合,实现快速开发。
文件下载

posted @ 2012-02-03 17:06 绝对在乎你 阅读(3559) | 评论 (2)编辑 收藏

2012年1月31日

htmlayout与lua(二) 设计思路

设计的思路是开发方便,现在做到的是嵌入的脚本方式和javascript相同,即可以在html页面中直接嵌入代码,也能从外部引用,以此来满足各种需要(或是方便或是为了便于管理)。在程序结构上,用了两层结构,dll程序中封装了对htmlayout元素的基本操作以及必要的交互接口,为了是开发更方便,更快捷,增加了lua脚本层,即ui目录的相关脚本,这一次的目的是为了简化程序开发时的代码,提高开发效率。现在看来,效果还可以。

嵌入脚本方式

在html页面文件中增加元素<script type="text/lua">...<script>即可添加页面脚本,每个页面的脚本空间是独立的,即此页面定义的函数只能是此页面才能使用,同时脚本的初始化是在页面加载完成之后在加载的,所以没有javascript类似的onload消息处理,直接将需要初始化执行的代码放在外部即可执行。

元素引用方式

在脚本中操作元素有以下几种方式:
1.最简单的方式是直接给元素附上id属性,这样在脚本中就可以直接使用这个id名称访问对应的元素了
2.通过函数E查找元素,参数为css选择其,如local d = E('div[type="test"]')

元素操作

在获得元素对象之后,操作的方式涉及到以下几个部分:
1.修改style,直接用obj.style['name'] = value; 即修改元素的style中的name,取值直接使用obj.style['name']即可
2.取元素属性用obj.attributes['name'] = value,用法和style相同
3.和html显示无关的数据,就如同普通的lua table操作即可,如obj.mypro = '1',因为获得元素对象本身就是一个table,所有lua table的功能都支持

posted @ 2012-01-31 23:24 绝对在乎你 阅读(3163) | 评论 (1)编辑 收藏

2012年1月30日

htmlayout中嵌入lua脚本

去年下半年工作调整,终于有时间开始做一些htmlayout封装的工作,初步将
lua脚本加上去了,使整个应用程序有了一个统一框架,不论是界面还是业务逻辑
都通过lua来实现,lua不能做的采用模块方式添加。

关于界面封装部分,参照sciter来做的,毕竟是和htmlayout是一家人,他们配合
起来肯定是更好的,不过tiscript不会用,也没人用,只能是自己用熟悉的东西
来做了,不过总的来说对这次封装还是感到比较满意的,前后改了3个版本,现在
是用比较纯粹的lua实现方式来做的,完全是一个lua第三方dll模块,使用require
加载即可使用,很方便,没有什么特殊的地方,对同时使用其他的库也比较方便。
同时添加了自己想要的一些东西,如页面之间的通讯,这样可以实现像普通mfc
程序那样,弹出多个页面,之间数据可以交互,同时页面又是独立开发的,比较
方面开发,同时控制每个页面的代码规模。因为曾经有个兄弟组用ajax做了一个
管理页面,整个页面代码5w多行,到后来根本没办法维护了。

demo程序下载点击下载(程序基于vs2008开发的,如没安装过vs2008,请先
安装vs2008的再发布包  在这里
demo集成了scintilla 编辑控件,主要是为了验证做第三放控件的能力,在编辑
框中使用标准库函数会自动提示。以后准备以此做一个集成开发环境。

posted @ 2012-01-30 23:29 绝对在乎你 阅读(3925) | 评论 (3)编辑 收藏

2010年6月3日

sciTE使用收集

1.配置说明
2.汉化配置文件
3.一些扩展示例

posted @ 2010-06-03 23:04 绝对在乎你 阅读(673) | 评论 (0)编辑 收藏

2010年4月5日

lua 应用服务器

线程模块(luathread.dll)

     新线程池创建,可以指定启动一个或多个线程

     thread.new('线程入口脚本文件', 线程数量);
     会根据线程数量创建多个线程,并且分别初始化每个线程的lua运行环境,并执行指定的线程脚本。

     tlist = thread.newlist('队列类型', '队列名称');
     创建一个同步队列,返回队列对象,此对象必须可以在多个线程中共享的,而且相同名称的对象
只能存在一个。

    tlist:create_new_object();
    创建新的对象,次对象可以加入到请求队列中

    tlist:push_request(obj);
    将通过create_new_object()创建的对加入到队列中

    tlist:wait_for_req(timeout);
    等待队列中有可以处理的请求

   tlist:get_request();
   从请求队列中取出一个请求来进行数据处理

  tlist:get_wait_object();
  返回可等待对象,以便脚本可以执行多个对象的等待任务

  tlist:get_info();
  获得队列的一些相关信息

线程代码
线程1:
   local tlist = thread.newlist('test', 'test0');
   local d = tlist:create_new_object();
   d:setdata('test', 'hello world');
   tlist:push_request(d);

线程2:
   local  tlist  = thread.newlist('test', 'test0');
   while(tlist:wait_for_request(1000)) do
             local d = tlist:get_request();
            handlesomething(d);
   end

posted @ 2010-04-05 23:20 绝对在乎你 阅读(932) | 评论 (0)编辑 收藏

2008年1月17日

挖虫日记 01.17

经过昨天的再次日志的详细记录,把线程处理中的请求包记录下来,发现有比较大的共性,那就是出问题的请求都是用户登录的请求,后台仔细检查这个请求的处理过程,发现有一个大问题在里面:
   1。应用程序在特定的配置下,会记录下每个用户的登录信息(不只是当前用户,而是登录过的所有用户)
   2.在新用户登录的时候,会检查1中记录的所有用户信息的状态
这样就造成一个大问题了,随着用户的不断登录登出,程序中积累的用户信息越来越多,而如果这时候同时有大量用户登录,每次登陆的时候都去循环检查所有用户信息,这样需要做的工作就巨大无比了。

现在的改进是:
   1.改每次用户登录检查为每隔30秒循环检查
   2.清理不需要的用户信息,避免出现保存的用户信息量过大。
   3.使用线程安全的map对象做数据保存

结果:
   今日的用户数量和前几天差不多,高峰的时候也是平均并发3000多,一整天没有出现任何问题。基本确认就是该问题导致的。

posted @ 2008-01-17 15:24 绝对在乎你 阅读(356) | 评论 (0)编辑 收藏

2008年1月15日

挖虫日记 11.15

先描述一下现象:
 环境:
       一个机房,均衡后带20台服务器,并发峰值大概在7万不到一点,平均下来一台服务器3000多并发
现象:
      20台服务器会随机出现应用服务器程序把cpu打满的情况,而正常情况下,3000并发的时候,应用服务器的cpu不超过10%,在cpu满的情况下程序基本上停止提供服务器,只有重启才能解决。
     开始的时候,20台服务器的程序一模一样,会随机有部分服务器出现情况。
     现在换了一半的服务器,测试新程序。

昨天通过系统自带的性能监视器,将占用cpu的线程找出来了。在这部分线程池的处理过程中,有循环的地方都加了数量判断,防止出现死循环。

今天问题仍然出现,新的老的程序上都出现过,出现的情况也不尽相同,有并发在1500左右,有3000左右。
没有出问题的并发都在3000上下,所以单纯说是并发造成的,可能不准确。最大的可能还是服务器遇到一个特殊的数据导致处理的错误,但是还有一点比较奇怪的是,有线程繁忙的时候,很快就会有该线程池中的其他线程也繁忙起来,难道异常数据出现的频率在这个点上如此之高??
今天下午的修改是:
   在单独的一个线程中来监视出现问题的线程池中的线程的状态,如果发现对单个请求的处理时间过长,那么记录下当前线程中的状态,希望能抓到究竟是什么情况下导致的问题?同时出现这种情况的时候,结束当前线程,重启一个线程放入线程池中,保证以下的工作正常处理。

   结果如何,明日再观察!

posted @ 2008-01-15 17:50 绝对在乎你 阅读(399) | 评论 (0)编辑 收藏

2008年1月6日

结合htmlayout 实现新界面框架的目标

1.可以通过htmlayout能显示html页面。
2.通过lua脚本控制html元素的行为。
3.增加自定义的控件。

posted @ 2008-01-06 23:39 绝对在乎你 阅读(3440) | 评论 (4)编辑 收藏

2007年12月27日

给windows程序添加一个标准控制台

在程序初始化代码里添加两句
AllocConsole(); //打开控制台窗口
freopen("CON", "w", stdout);  //将标准输出重定向到控制台窗口上如果要接受用户输入的话把标准输入也重定向一下。

posted @ 2007-12-27 12:49 绝对在乎你 阅读(715) | 评论 (0)编辑 收藏

2007年12月23日

GDI 中曲线的画法

 
在windows的GDI中,如果需要画非常优美的曲线,那么最适合用PolyBezier函数,通过4个点,
起点,起点控制点、终点控制点和终点,可以得到一条非常漂亮的曲线,比自己去算弧度
好多了。

posted @ 2007-12-23 17:26 绝对在乎你 阅读(871) | 评论 (0)编辑 收藏