当前位置:首页 » 软件开发
开发技术指南» 文章正文
    引言: 1 缘起 1.1 我的一
 

 

    摘要: 内容:ini文件在系统配置及应用程序参数保存与设置方面,具有很重要的作用,所以可视化的编程一族,如vb、vc、vfp、delphi等都提供了读写ini文件的方法,其中delphi中操作ini文件,最为简洁,这是因为delphi6.0提供了一个tinifile类,使我们可以非常灵活的处理ini文件。 一、有必要了解ini文件的结构:;注释[小节名]关键字=值... ini文件允许有多个小节,......
    摘要: 内容: 要利用.ini文件做程序有关数据的存储工作,就需要能读和写.ini文件,所以列了如下方法给大家参考:从.ini文件中获取字符串varstrresult:pchar;begingetprivateprofilestring(windows, // []中标题的名字nullport, // =号前的名字nil, // 如果没有找到字符串时,返回的默认值strresult, //存放取得......


简易对象垃圾回收框架 for Delphi
1       缘起

程序名称:呼叫处理模块的压力测试工具,分为客户端与服务端. 【程序编程相关:多层数据库开发十:存储过程

1.1   我的一个出错程序 【推荐阅读:多层数据库开发十四:剖析几个MIDAS示

相关技术:客户端通过与服务端建立socket连接来模拟一组电话机的拨入.按键.等待.挂机等过程.服务端对socket事件以及收到的数据包进行预处理,并转化为抽象的呼叫模型数据,然后发送给更上层的呼叫处理模块.由于呼叫处理模块是硬件无关的(与语音板卡.交换机类型均无关),因此通过此压力测试工具可以比较真实地模拟海量呼叫,以达到测试呼叫处理模块程序的逻辑正确性及其性能的目的. 【扩展信息:多层数据库开发八:访问表格

开发工具:delhpi 5

由于系统设计时的某些考虑,该测试工具被分作客户端与服务端两个程序来实现,且采用socket进行通讯.现在想来,其实不如整合成一个程序实现更为简单——但也正因为采用两个程序来实现,才引发了后面的一些问题,并由此引入了简单的垃圾回收框架.

1.2   问题

在测试工具的使用过程中,我们发现当呼叫量巨大,且测试工具动作频繁的情况下,系统出现以下错误:

n         访问地址错(eaccessviolation),代码地址位于$0046fc80附近,访问地址多为$00000028.

n         出现einvalidcast错误,该错误表明对一个地址进行类类型转换时出错(采用as关键字).

n         程序内多处断言失败,出现许多引用已销毁对象的情况.

仔细检查程序后,我仍然认为这一切简直是不可思议!而且,本来用于对别的程序进行测试的程序自身却出现这类问题,几乎让我无地自容!

为了挽回自己的声誉,我不得不成沉住气来仔细跟踪错误,排解问题!

2       解决办法

2.1   查错

其实问题的解决还比较顺利.

通过查看程序的调用栈,发现程序出错前总是停留在发送socket数据包的过程里.接着,进一步通过单步跟踪,发现在发送数据包的过程中,socket检测到对端连接已经断开,就会触发ondisconnect事件.而我正是在serversocket的ondisconnect事件中根据传递进来的socket句柄,找到对应的对象将之销毁的.

我在serversocket的ondisconnect事件中的代码如下:

procedure txxxx.serverclientdisconnect(sender: tobject;

  socket: tcustomwinsocket);

begin

  …

  flines.destroylinebysocket(socket);//正是这一句,在不合适的时机释放了对象

  …

end;

问题是这么出现的.

比如,在某个过程中具有如下代码(前面为行号):


...   下一页
 ·开发一个密码查看器    »显示摘要«
    摘要: 现在有很多软件都有密码输入对话框。上面显示的是*标识符。如果想查看其字符串并不难。下面我们就用delphi使用api函数来开发一个查看其密码字符的程序吧。 功能:当鼠标移动到密码处就会在程序的指定地方显示其字符串。 问题一:当鼠标移动到密码对话框处时查找出此处的控件句柄。这样才可以对这个对象进行操作.具体实现如下: function gethwnd(): thandle;var hwnd:......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE