multithreading - TThreadList和 “with”语句

标签 multithreading delphi thread-safety locking

关于如何使用TThreadList的简短问题。将它与“with”语句一起使用是否安全,如下所示:

  with FEngineList.DAQEngines.LockList do
  begin
    try
      for Idx := 0 to Count - 1 do
        Items[idx].Param1 := cos(2*pi*I/Count);
      ...
      ...
    finally
      FEngineList.DAQEngines.UnlockList;
    end;
  end;

还是我应该像下面这样显式地这样做:
  uEngines := FEngineList.DAQEngines.LockList;
  try
    with uEngines do
    begin
      for Idx := 0 to Count - 1 do
        Items[idx].Param1 := cos(2*pi*I/Count);
      ...
      ...
    end;
  finally
    FEngineList.DAQEngines.UnlockList;
  end;

谢谢!

最佳答案

选择哪种变体取决于您。 with仅告诉编译器在哪里获取您在代码中编写的成员。因此,只要您要访问的成员,它都是安全的。它不会影响运行时。

我更喜欢第一种方法,就是没有begin..end块(如果我被迫使用with),但这只是我个人的喜好,您可以随意编写它:

with FEngineList.DAQEngines.LockList do
try
  ...
finally
  FEngineList.DAQEngines.UnlockList;
end;

关于multithreading - TThreadList和 “with”语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30256619/

相关文章:

delphi - datasnap TSocketconnection 挂起

delphi - 监视从命令提示符启动的文件复制操作

c++ - 使对 unsigned char 线程安全(原子)的访问

c# - 这些方法线程安全吗?

java - Swing Worker 线程意外停止执行代码

Java 线程通知器 - android

java - 内存缓存的线程安全实现

delphi - 停止 TWebBrowser 脚本错误弹出窗口,但不停止 OnShowScriptError 事件

java - 在多个线程之间共享对象

c++ - 可移植的 C++ 多线程