日常注意点

一:关于类

         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

原文地址:https://www.cnblogs.com/lodor/p/4744884.html