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;

  • 相关阅读:
    Java 过滤器
    理解Java中的弱引用(Weak Reference)
    AOP编程
    利用ThreadLocal管理事务
    Redis设计与实现-附加功能
    Redis设计与实现-主从、哨兵与集群
    Redis设计与实现-客户端服务端与事件
    Redis设计与实现-持久化篇
    Redis设计与实现-内部数据结构篇
    重温软件架构设计-程序员向架构师转型必备
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/3957510.html
Copyright © 2011-2022 走看看