相关疑难解决方法(0)

使用D2009和D2010的新功能在Delphi中创建单例

我想在Delphi中创建一个单例.我在使用旧版本的Delphi之前完成了这个,最后使用全局变量(在实现部分中)并使用初始化和终结来处理实例.此外,无法阻止用户创建实例,因为您无法隐藏标准构造函数.我想知道是否有任何新的功能,如类构造函数和析构函数,以及类变量(好的,不是那么新),也许是泛型,可以帮助创建一个通用的单例类.我还没有设法让我感到满意.

delphi singleton design-patterns

10
推荐指数
4
解决办法
7382
查看次数

获取单例类实例多线程

要使用单例模式获取类的实例,我想使用以下函数:

这是草图

interface

uses SyncObjs;

type
  TMCriticalSection = class(TCriticalSection)
  private
    Dummy : array [0..95] of Byte;
  end;

var
  InstanceNumber : Integer;
  AObject: TObject;
  CriticalSection: TMCriticalSection;

function getInstance: TObject;

implementation

uses Windows;

function getInstance: TObject;
begin
   //I Want somehow use InterlockedCompareExchange instead of CriticalSession, for example

   if InterlockedCompareExchange(InstanceNumber, 1, 0) > 0 then
   begin
     Result := AObject;
   end
   else
   begin
      CriticalSection.Enter;
      try
        AObject := TObject.Create;
      finally
        CriticalSection.Leave;
      end;
      InterlockedIncrement(InstanceNumber);
      Result := AObject
   end;
end;

initialization
  CriticalSection := TMCriticalSection.Create;
  InstanceNumber := 0; …
Run Code Online (Sandbox Code Playgroud)

delphi singleton multithreading synchronization delphi-6

2
推荐指数
1
解决办法
837
查看次数