日常注意点
一:关于类
TfrmFAModule = class;
TfrmFAModuleClass = class of TfrmFAModule; 关于此申明的作用,可以传递一个类参数,比如
function ShowModule(AModuleClass: TfrmFAModuleClass;AnModuleNo: integer; const AsName: string = '';
const bAutoCreate: boolean = True; const bBrintToFront: boolean = True): TfrmFAModule; //显示界面
二:关于try
try 。。。。finally 。。。end; 语句 对象在try语句之前创建,不然finally中的对象释放可能不存在。
三:直接操作数据库的sql不要在界面单元写,而要在obj中写
四:关于过程指针
//指向显示明细模块过程的指针。Params 传入参数 此函数作用:在基类中申明与执行过程,在子类中给定指针的值,有利于基类的设计统一
PShowDetail: procedure (Sender: TObject; Params: TPKValueList);
PShowDetail := LoadLSSalesMan; //给指针过程赋值
if Assigned(PShowDetail) then //执行指针过程
begin
ValueList := TPKValueList.Create;
try
FetchParamsForShowDetail(ValueList);
PShowDetail(self, ValueList);
finally
ValueList.Free;
end;
end;
五:关于方法继承
父类方法有abstract标识,子类没声明且没实现,如果子类的子类要实例化的话,则子类的子类必须声明以及实现该方法
如果子类与父类指向同一个对象,当释放掉父类对象后,不能再释放掉子类对象
JSON之SuperObject
万一博客:http://www.cnblogs.com/del/category/215158.html
类方法作用:
不用创建对象就能用,避免内存泄露
delphi关闭应用程序
function KillTask(ExeFileName:string):boolean;
const
PROCESS_TERMINATE = $0001;
var
ContinueLoop: BOOLean;
FSnapshotHandle: THandle;
FProcessEntry32: TProcessEntry32;
begin
Result := False;
FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); 通过获取进程信息为指定的进程、进程使用的堆[HEAP]、模块[MODULE]、线程建立一个快照。0:表示当前进程
FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);
while Integer(ContinueLoop) <> 0 do
begin
if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) = UpperCase(ExeFileName))) then
Result := TerminateProcess(
OpenProcess(PROCESS_TERMINATE,
BOOL(0),
FProcessEntry32.th32ProcessID),
0);
ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32); //进程的依次循环来找正确的进程关闭
end;
CloseHandle(FSnapshotHandle);
end;
异常问题
数据类型转型时可能要抛出异常,比如字符串转型成浮点型等,必须要抛出异常
截取字符串 Trunc在有必要的情况下也要抛出异常
对于异常处理要特别注意
杂录
initialization ------ 在单元中放在文件结尾前,包含用来初始化单元的代码,它在主程序运行前运行并且只运行一次。
finalization ------ 在单元中放在 initialization 和 end. 之间,包含了单元退出时的代码。在程序退出时运行并且只运行一次。
前台程序尽量用FreeAndNil来释放资源
前台InitDevice中关于互斥量与信号量运用
理解互斥量与信号量
http://blog.chinaunix.net/uid-10008293-id-2972285.html
动作\系统 | Win32 | Linyx | Solaris |
创建 | CreateMutex | pthread_mutex_init | mutex_init |
加锁 | WaitForSingleObject | pthread_mutex_lock | mutex_lock |
解锁 | ReleaseMutex | pthread_mutex_unlock | mutex_unlock |
销毁 | CloseHandle | pthread_mutex_destroy | mutex_destroy |
摘要:
1. 互斥量用于线程的互斥,信号线用于线程的同步。
这是互斥量和信号量的根本区别,也就是互斥和同步之间的区别。
互斥:是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。
同步:是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。在大多数情况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。少数情况是指可以允 许多个访问者同时访问资源
互斥量值只能为0/1