摘要:
内容: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:......