Delphi – 有没有相当于C#锁?

前端之家收集整理的这篇文章主要介绍了Delphi – 有没有相当于C#锁?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在Delphi中编写一个多线程应用程序,需要使用某些东西来保护共享资源.

在C#中,我使用“lock”关键字:

private someMethod() {
    lock(mySharedObj) {
        //...do something with mySharedObj
    }
}

在Delphi中,我找不到任何类似的东西,我发现只有TThread.Synchronize(someMethod)方法,它通过在主VCL线程中调用someMethod可以防止潜在的冲突,但这并不完全是我想要做的.

编辑:我使用的是Delphi 6

解决方法

(Un)幸运的是,您无法锁定Delphi 6中的任意对象(尽管您可以在更新版本,2009和更高版本中),因此您需要具有单独的锁定对象,通常是关键部分.

TCriticalSection(注意:文档来自FreePascal,但它也存在于Delphi中):

示例代码

type
  TSomeClass = class
  private
    FLock : TCriticalSection;
  public
    constructor Create();
    destructor Destroy; override;

    procedure SomeMethod;
  end;

constructor TSomeClass.Create;
begin
  FLock := TCriticalSection.Create;
end;

destructor TSomeClass.Destroy;
begin
  FreeAndNil(FLock);
end;

procedure TSomeClass.SomeMethod;
begin
  FLock.Acquire;
  try
    //...do something with mySharedObj
  finally
    FLock.Release;
  end;
end;
原文链接:https://www.f2er.com/delphi/102689.html

猜你在找的Delphi相关文章