亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? uathread.~pas

?? 基于Midas 技術的多層應用開發包第二版(帶開發文檔)
?? ~PAS
?? 第 1 頁 / 共 2 頁
字號:
{******************************************************************************************}
{                                                                                          }
{       Universal Agent on demond SDK                                                      }
{                                                                                          }
{                                                                                          }
{ COPYRIGHT                                                                                }
{ =========                                                                                }
{ The UA SDK (software) is Copyright (C) 2001-2003, by vinson zeng(曾胡龍).                }
{ All rights reserved.                                                                     }
{ The authors - vinson zeng (曾胡龍),                                                      }
{ exclusively own all copyrights to the Advanced Application                               }
{ Controls (AppControls) and all other products distributed by Utilmind Solutions(R).      }
{                                                                                          }
{ LIABILITY DISCLAIMER                                                                     }
{ ====================                                                                     }
{ THIS SOFTWARE IS DISTRIBUTED "AS IS" AND WITHOUT WARRANTIES AS TO PERFORMANCE            }
{ OF MERCHANTABILITY OR ANY OTHER WARRANTIES WHETHER EXPRESSED OR IMPLIED.                 }
{ YOU USE IT AT YOUR OWN RISK. THE AUTHOR WILL NOT BE LIABLE FOR DATA LOSS,                }
{ DAMAGES, LOSS OF PROFITS OR ANY OTHER KIND OF LOSS WHILE USING OR MISUSING THIS SOFTWARE.}
{                                                                                          }
{ RESTRICTIONS                                                                             }
{ ============                                                                             }
{ You may not attempt to reverse compile, modify,                                          }
{ translate or disassemble the software in whole or in part.                               }
{ You may not remove or modify any copyright notice or the method by which                 }
{ it may be invoked.                                                                       }
{******************************************************************************************}

unit UAThread;

interface

uses
  Windows, Classes;

type

  TUACustomThread = class;
  { TUAEventThread }
  TUAEventThread = class
  private
    FHandle: THandle;
    FThreadID: THandle;
    FTerminated: Boolean;
    FSuspended: Boolean;
    FFreeOnTerminate: Boolean;
    FReturnValue: Integer;
    FRunning: Boolean;
    FMethod: TThreadMethod;
    FSynchronizeException: TObject;

    FOnExecute,
    FOnException,
    FOnTerminate: TNotifyEvent;

    // for internal use
    Owner: TUACustomThread;

    function  GetPriority: TThreadPriority;
    procedure SetPriority(Value: TThreadPriority);
    procedure SetSuspended(Value: Boolean);

    procedure CallTerminate;    
    procedure CallException;

  protected

    procedure DoTerminate; //virtual;
    procedure Execute; //virtual;
    procedure Synchronize(Method: TThreadMethod);
    property ReturnValue: Integer read FReturnValue write FReturnValue;
    property Terminated: Boolean read FTerminated;

    function CreateThread: TUAEventThread;
    function RecreateThread: TUAEventThread;

  public
    constructor Create(aOwner: TUACustomThread);
    destructor Destroy; override;
    procedure Resume;
    procedure Suspend;
    procedure Terminate;
    function WaitFor:Cardinal;

    property FreeOnTerminate: Boolean read FFreeOnTerminate write FFreeOnTerminate;
    property Handle: THandle read FHandle;
    property Priority: TThreadPriority read GetPriority write SetPriority;
    property Suspended: Boolean read FSuspended write SetSuspended;
    property ThreadID: THandle read FThreadID;

    property OnExecute: TNotifyEvent read FOnExecute write FOnExecute;
    property OnException: TNotifyEvent read FOnException write FOnException;
    property OnTerminate: TNotifyEvent read FOnTerminate write FOnTerminate;    
  end;

  { TUACustomThread }
  TUACustomThread = class(TComponent)
  private
    FThread: TUAEventThread;
    FDesignSuspended:Boolean;
    FHandleExceptions:Boolean;
    FFreeOwnerOnTerminate:Boolean;
    FWaitThread: Boolean;
    FWaitTimeout: Cardinal;    

    FOnWaitTimeoutExpired: TNotifyEvent;

    { for internal use }
    FSyncMethod: TNotifyEvent;
    FSyncParams: Pointer;

    procedure InternalSynchronization;

    function  GetPriority: TThreadPriority;
    procedure SetPriority(Value: TThreadPriority);
    function  GetSuspended: Boolean;
    procedure SetSuspended(Value: Boolean);
    function  GetRunning: Boolean;
    function  GetTerminated: Boolean;
    function  GetThreadID: THandle;

    function  GetOnException: TNotifyEvent;
    procedure SetOnException(Value: TNotifyEvent);
    function  GetOnExecute: TNotifyEvent;
    procedure SetOnExecute(Value: TNotifyEvent);
    function  GetOnTerminate: TNotifyEvent;
    procedure SetOnTerminate(Value: TNotifyEvent);

    function  GetHandle: THandle;
    function  GetReturnValue: Integer;
    procedure SetReturnValue(Value: Integer);
  protected
    procedure Loaded; override;
    procedure DoWaitTimeoutExpired; //virtual;
  public
    constructor Create(aOwner: TComponent); override;
    destructor Destroy; override;

    { public methods and properties }
    function  Execute: Boolean; // virtual;
    procedure Synchronize(Method: TThreadMethod); //virtual;
    procedure SynchronizeEx(Method: TNotifyEvent; Params: Pointer); //virtual;
    procedure Suspend;
    procedure Resume;
    procedure Terminate(Imediately: Boolean); //virtual;
    function  WaitFor:Cardinal;

    property Handle: THandle read GetHandle;
    property Running: Boolean read GetRunning;
    property Terminated: Boolean read GetTerminated;
    property ThreadID: THandle read GetThreadID;
    property ReturnValue: Integer read GetReturnValue write SetReturnValue;
    property FreeOwnerOnTerminate: Boolean read FFreeOwnerOnTerminate write FFreeOwnerOnTerminate default False;

    // properties
    property HandleExceptions: Boolean read FHandleExceptions write FHandleExceptions default True;
    property Priority: TThreadPriority read GetPriority write SetPriority default tpNormal;
    property Suspended: Boolean read GetSuspended write SetSuspended default True;
    property WaitThread: Boolean read FWaitThread write FWaitThread default False;
    property WaitTimeout: Cardinal read FWaitTimeout write FWaitTimeout default 0;

    // events
    property OnException: TNotifyEvent read GetOnException write SetOnException;
    property OnExecute: TNotifyEvent read GetOnExecute write SetOnExecute;
    property OnTerminate: TNotifyEvent read GetOnTerminate write SetOnTerminate;
    property OnWaitTimeoutExpired: TNotifyEvent read FOnWaitTimeoutExpired write FOnWaitTimeoutExpired;
  end;

  { TUAThread }
  TUAThread = class(TUACustomThread)
  published
    property HandleExceptions;
    property Priority;
    property Suspended;
    property WaitThread;
    property WaitTimeout;

    property OnException;
    property OnExecute;
    property OnTerminate;
    property OnWaitTimeoutExpired;
  end;


  TUAThreadPool   = class(TComponent)
  private

  protected

  public


  published

  end;

  TUAThreadManager = class(TComponent)
  private


  protected


  public
    //procedure Spawn(Sender:TObject);


  published


  end;

implementation

uses Forms;

const
  CM_EXECPROC = $8FFF;
  CM_DESTROYWINDOW = $8FFE;

  Priorities: Array[TThreadPriority] of Integer =
   (THREAD_PRIORITY_IDLE, THREAD_PRIORITY_LOWEST, THREAD_PRIORITY_BELOW_NORMAL,
    THREAD_PRIORITY_NORMAL, THREAD_PRIORITY_ABOVE_NORMAL,
    THREAD_PRIORITY_HIGHEST, THREAD_PRIORITY_TIME_CRITICAL);

type
  PRaiseFrame = ^TRaiseFrame;
  TRaiseFrame = record
    NextRaise: PRaiseFrame;
    ExceptAddr: Pointer;
    ExceptObject: TObject;
    ExceptionRecord: PExceptionRecord;
  end;

var
  ThreadLock: TRTLCriticalSection;
  ThreadWindow: HWND;
  ThreadCount: Integer;


function ThreadWndProc(Window: HWND; Message, wParam, lParam: Longint): Longint; stdcall;
begin
  case Message of
    CM_EXECPROC:
      with TUAEventThread(lParam) do
       begin
        Result := 0;
        if not (csDestroying in Owner.ComponentState) then
         try
           FSynchronizeException := nil;
           FMethod;
         except
//沒必要進行額外處理
//{$WARNINGS OFF}
//{$IFNDEF VER110}
           if RaiseList <> nil then
           begin
             FSynchronizeException := PRaiseFrame(RaiseList)^.ExceptObject;
             PRaiseFrame(RaiseList)^.ExceptObject := nil;
           end;
//{$ENDIF}
//{$WARNINGS ON}
         end;
       end;
    CM_DESTROYWINDOW:
      begin
        EnterCriticalSection(ThreadLock);
        try
          if (ThreadCount = 0) and (ThreadWindow <> 0) then
          begin
            DestroyWindow(ThreadWindow);
            ThreadWindow := 0;
          end;
        finally
          LeaveCriticalSection(ThreadLock);
        end;
        Result := 0;
      end;
  else
    Result := DefWindowProc(Window, Message, wParam, lParam);
  end;
end;

var
  ThreadWindowClass: TWndClass = (
    style: 0;
    lpfnWndProc: @ThreadWndProc;
    cbClsExtra: 0;
    cbWndExtra: 0;
    hInstance: 0;
    hIcon: 0;
    hCursor: 0;
    hbrBackground: 0;
    lpszMenuName: nil;
    lpszClassName: 'TUAThreadWindow');

procedure AddThread;

  function AllocateWindow: HWND;
  var
    TempClass: TWndClass;
    ClassRegistered: Boolean;
  begin
    ThreadWindowClass.hInstance := HInstance;
    ClassRegistered := GetClassInfo(HInstance, ThreadWindowClass.lpszClassName, TempClass);
    if not ClassRegistered or (TempClass.lpfnWndProc <> @ThreadWndProc) then
     begin
      if ClassRegistered then
        Windows.UnregisterClass(ThreadWindowClass.lpszClassName, HInstance);
      Windows.RegisterClass(ThreadWindowClass);
     end;
    Result := CreateWindow(ThreadWindowClass.lpszClassName, '', 0,
      0, 0, 0, 0, 0, 0, HInstance, nil);
  end;

begin
  EnterCriticalSection(ThreadLock);
  try
    if ThreadCount = 0 then
      ThreadWindow := AllocateWindow;
    Inc(ThreadCount);
  finally
    LeaveCriticalSection(ThreadLock);
  end;
end;

procedure RemoveThread;
begin
  EnterCriticalSection(ThreadLock);
  try
    Dec(ThreadCount);
    if ThreadCount = 0 then
      PostMessage(ThreadWindow, CM_DESTROYWINDOW, 0, 0);
  finally
    LeaveCriticalSection(ThreadLock);
  end;
end;

function ThreadProc(Thread: TUAEventThread): Integer;
var
  FreeThread: Boolean;
begin
  Thread.FRunning := True;
  try
    Thread.Execute;
  finally
    FreeThread := Thread.FFreeOnTerminate;
    Result := Thread.FReturnValue;
    Thread.FRunning := False;
    Thread.DoTerminate;
    if FreeThread then Thread.Free;
    EndThread(Result);
  end;
end;

{ TUAEventThread }
constructor TUAEventThread.Create(aOwner: TUACustomThread);
var
  Flags: DWORD;
begin
  inherited Create;
  Owner := aOwner;

  AddThread;
  
  FSuspended := True; 
  Flags := CREATE_SUSPENDED;

  FHandle := BeginThread(nil, 0, @ThreadProc, Pointer(Self), Flags, FThreadID);
end;

destructor TUAEventThread.Destroy;
begin
  if FRunning and not Suspended then
   begin

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91欧美一区二区| 91精品欧美一区二区三区综合在| 91久久精品一区二区三| 日韩视频在线永久播放| 亚洲人吸女人奶水| 久久99精品久久久久久动态图| aaa国产一区| 亚洲精品一区二区三区福利| 一区二区三区日本| 国产成人在线视频免费播放| 日韩欧美在线影院| 亚洲福利视频导航| 婷婷久久综合九色综合伊人色| 国产精品另类一区| 中文乱码免费一区二区| 国产欧美精品一区二区色综合朱莉| 欧美一级艳片视频免费观看| 在线看国产一区二区| 国产日韩精品久久久| 欧美a级一区二区| 欧美性一区二区| 亚洲美女视频在线| 99久久精品情趣| 国产精品美女久久久久久2018| 久久99精品国产.久久久久久| 欧美二区在线观看| 亚洲午夜av在线| 欧美性生活久久| 一区二区三区在线观看网站| 91在线观看地址| 久久精品欧美一区二区三区麻豆| 亚洲电影第三页| 亚洲一线二线三线视频| 99免费精品在线| 国产精品福利一区二区| 国产99一区视频免费| 国产欧美一区二区精品仙草咪| 久久国产麻豆精品| 欧美刺激午夜性久久久久久久| 六月丁香婷婷久久| 日韩美女主播在线视频一区二区三区| 日本不卡不码高清免费观看| 欧美一级二级三级蜜桃| 美女网站一区二区| 2023国产精品视频| 国产夫妻精品视频| 国产精品久久久久婷婷二区次| www.欧美日韩国产在线| 一区二区在线电影| 欧美另类久久久品| 久久99这里只有精品| 久久影音资源网| 国产欧美精品国产国产专区| 亚洲狠狠丁香婷婷综合久久久| 久久精品亚洲精品国产欧美| 国产精一区二区三区| 国产女人18水真多18精品一级做| 不卡视频在线看| 一区二区三区欧美久久| 欧美日韩成人激情| 国产中文字幕精品| 亚洲三级小视频| 欧美日韩高清一区二区| 极品少妇一区二区三区精品视频| 国产亚洲精品中文字幕| 91丨porny丨户外露出| 视频在线在亚洲| 国产亚洲欧美一区在线观看| 91污在线观看| 日韩高清一区在线| 国产三级精品视频| 一本色道久久综合亚洲aⅴ蜜桃| 天天综合天天综合色| 精品国产自在久精品国产| 成年人国产精品| 亚洲va韩国va欧美va精品| 久久久99精品久久| 欧美日韩高清一区二区三区| 国产精品乡下勾搭老头1| 亚洲一区二区三区视频在线播放| 精品第一国产综合精品aⅴ| 91美女片黄在线| 精品一区免费av| 一区二区三区免费网站| 久久久久国产精品麻豆ai换脸 | 国产精品色在线观看| 欧美电影一区二区| aaa亚洲精品| 国产精品18久久久| 视频一区视频二区中文| 国产精品九色蝌蚪自拍| 欧美草草影院在线视频| 精品视频在线免费| 懂色av一区二区三区免费观看 | 色综合久久综合中文综合网| 国产在线观看免费一区| 日韩黄色小视频| 一区二区三区 在线观看视频| 国产日产亚洲精品系列| 欧美成人精品1314www| 欧美精品久久天天躁| 在线观看不卡视频| 99久久免费精品高清特色大片| 国产一区在线观看视频| 色久优优欧美色久优优| 国产69精品久久99不卡| 国产一区二区三区四区在线观看| 日韩成人精品视频| 亚洲成人精品影院| 亚洲地区一二三色| 亚洲午夜久久久久中文字幕久| 亚洲女女做受ⅹxx高潮| 国产精品久久久久一区二区三区| 国产欧美日韩亚州综合| 久久精品这里都是精品| 久久综合九色综合欧美98| 精品久久人人做人人爱| 精品国产伦理网| 久久久久久亚洲综合影院红桃| 久久精品一区二区三区四区| 久久久久久久久久久久电影| 国产网红主播福利一区二区| 国产日韩欧美在线一区| 国产三级一区二区| 中文字幕不卡一区| 国产精品久久久久aaaa樱花| 亚洲欧洲99久久| 亚洲激情五月婷婷| 调教+趴+乳夹+国产+精品| 日本麻豆一区二区三区视频| 久久精品国产99久久6| 激情图片小说一区| 成人性生交大合| 91麻豆精品在线观看| 欧美日韩精品二区第二页| 制服丝袜成人动漫| 久久日韩精品一区二区五区| 欧美国产精品v| 夜夜精品视频一区二区| 午夜精品久久久久| 美腿丝袜在线亚洲一区| 国产91在线观看| 在线观看免费成人| 日韩精品专区在线影院观看| 国产精品入口麻豆原神| 亚洲超碰精品一区二区| 九一久久久久久| 91蝌蚪porny| 9191精品国产综合久久久久久| 精品成人免费观看| 亚洲精品国产精品乱码不99| 一片黄亚洲嫩模| 国内精品第一页| 99精品欧美一区| 日韩欧美卡一卡二| |精品福利一区二区三区| 日韩**一区毛片| 9l国产精品久久久久麻豆| 3d成人动漫网站| 成人免费小视频| 国内精品久久久久影院薰衣草 | 中文欧美字幕免费| 天堂久久一区二区三区| 成人免费高清在线| 欧美一区二区三区人| 国产精品久久久一本精品| 蜜臀久久99精品久久久久久9| 99在线精品免费| 精品国产91乱码一区二区三区 | 国产精品久久久久久久久图文区 | 91精品国产综合久久精品| 国产精品午夜在线观看| 老色鬼精品视频在线观看播放| 91在线云播放| 国产欧美日韩三区| 99在线视频精品| 麻豆一区二区三| 久久久国产精品不卡| 成人综合激情网| 亚洲午夜久久久久久久久电影院 | 国产乱码精品一品二品| 91国产精品成人| 国产农村妇女毛片精品久久麻豆 | 亚洲欧美日韩在线| 国产·精品毛片| 26uuu另类欧美| 日韩成人午夜精品| 欧美体内she精视频| 亚洲人精品一区| 91麻豆免费视频| 亚洲色图制服丝袜| 97久久精品人人做人人爽| 国产肉丝袜一区二区| 国产一区91精品张津瑜| 欧美成人艳星乳罩| 另类综合日韩欧美亚洲| 日韩美女天天操| 久久成人精品无人区| 日韩欧美在线综合网| 久久电影网站中文字幕|