zoukankan      html  css  js  c++  java
  • 事务同步多线程

    unit GetBillNoObj;

    interface

    uses
    System.Classes, System.SysUtils, Data.FMTBcd, Data.DB, Winapi.Windows,
    Data.SqlExpr;

    Type
    TGetBillNoObj = class(TThread)
    private
    Fext_id: string;
    Fsc_id: string;
    FBillNo: string;
    FEvent: THandle;
    protected
    procedure Execute; override;
    procedure GetBillNo; inline;
    public
    constructor Create; overload;
    destructor Destroy; override;
    procedure Run; inline;
    procedure Clear;
    property ext_id: string read Fext_id write Fext_id;
    property sc_id: string read Fsc_id write Fsc_id;
    property BillNo: string read FBillNo write FBillNo;
    end;

    implementation

    uses SqlconnectPool, SqlStoredProcPool, CommonFunction;

    procedure TGetBillNoObj.Clear;
    begin
    Fext_id := '';
    Fsc_id := '';
    FBillNo := '';
    end;

    constructor TGetBillNoObj.Create;
    begin
    FEvent := CreateEvent(nil, True, False, nil);
    inherited Create(False);
    FreeOnTerminate := True;
    end;

    destructor TGetBillNoObj.Destroy;
    begin
    CloseHandle(FEvent);
    inherited;
    end;

    procedure TGetBillNoObj.Execute;
    begin
    try
    while not Terminated do
    if WaitForSingleObject(FEvent, INFINITE) = WAIT_OBJECT_0 then
    GetBillNo;
    except
    on E: Exception do
    begin
    LogInfo('TGetBillNoObj.Execute---' + E.Message);
    Exit;
    end;
    end;
    end;

    procedure TGetBillNoObj.GetBillNo;
    var
    c: TSQLConnection;
    p: TSQLStoredProc;
    begin
    try
    c := G_SqlConnectionPool.Lock;
    p := G_SqlStoredProcPool.Lock;
    try
    if Assigned(c) and Assigned(p) then
    begin
    p.Close;
    p.Params.Clear;
    p.SQLConnection := c;
    ssSetProcParam(p, 'sspGetSysCode');
    p.Params.ParamByName('@ext_id').Value:=ext_id;
    p.Params.ParamByName('@sc_id').Value:=sc_id;
    p.ExecProc;
    FBillNo := p.ParamByName('@sc_code').AsString;
    end;
    finally
    G_SqlConnectionPool.Unlock(c);
    G_SqlStoredProcPool.UnLock(p);
    end;
    except
    on E: Exception do
    begin
    LogInfo('TGetBillNoObj.GetBillNo---' + E.Message);
    exit;
    end;
    end;
    end;

    procedure TGetBillNoObj.Run;
    begin
    PulseEvent(FEvent);
    end;

  • 相关阅读:
    SSM知识点与整合之Spring知识点(pom.xml需要依赖的jar或者plugin)
    Linux安装Tomcat-Nginx-FastDFS-Redis-Solr-集群——【第十三集之Redis的单机版搭建】
    maven pom.xml(公司版)
    spring开发需要的配置文件
    Python socket编程之六:多窗口的应用
    subplot的应用
    Python socket编程之五:更新分时图
    Python序列的切片操作与技巧
    Python socket编程之四:模拟分时图
    NSNotificationCenter 注意
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/3957510.html
Copyright © 2011-2022 走看看