看到老外一个有意思的类,发现自己无知了 ...

废话不说,直接贴代码:

unit NewWindows;
interface

uses Windows;

{$HINTS OFF}
type
  TNewCriticalSection = object
  private
    FOldCriticalSection: TRTLCriticalSection;
  public
    procedure Initialize; stdcall;
    procedure Delete; stdcall;
    procedure Enter; stdcall;
    procedure Leave; stdcall;
  end;
{$HINTS ON}

implementation

procedure TNewCriticalSection.Initialize;
  external kernel32 name 'InitializeCriticalSection';

procedure TNewCriticalSection.Delete;
  external kernel32 name 'DeleteCriticalSection';

procedure TNewCriticalSection.Enter;
  external kernel32 name 'EnterCriticalSection';

procedure TNewCriticalSection.Leave;
  external kernel32 name 'LeaveCriticalSection';

end.

 

基于 object 的老式对象实现,确实值得品味,这是使用范例:

 

procedure Test;
var
  NewCS: TNewCriticalSection;
begin
  NewCS.Initialize;
  try
    NewCS.Enter;
    try
      //somecode
    finally
      NewCS.Leave;
    end;
  finally
    NewCS.Delete;
  end;
end;

相比传统的 op 的代码:
 
procedure Test;
var
  CS: TCriticalSection;
begin
  InitializeCriticalSection(CS);
  try
    EnterCriticalSection(CS);
    try
      //somecode
    finally
      LeaveCriticalSection(CS);
    end;
  finally
    DeleteCriticalSection(CS);
  end;
end;

还有利用 SyncObjs 的 TCriticalSection 的例子就不写了。

posted @ 2011-01-20 21:11  lsuper  阅读(471)  评论(0)    收藏  举报