• 事务同步多线程


    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;

  • 相关阅读:
    day 67 Django的view 与路由
    day65 Django模板语言
    day64 views文件
    day 64 Django 第五天 多表对多表的对应关系ORM
    Day 62 Django第三天
    Day 61 Django第二天 (orm数据库操作)
    day 60 Django第一天
    day 59 pymysql
    day 58
    三个按钮作业
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/3957510.html
Copyright © 2020-2023  润新知