我的执行代码线程安全吗?

时间:2011-12-26 12:27:22

标签: multithreading delphi thread-safety

基于此article

在我的数据库上做一些工作时,我使用此代码在给定的Window Handle上制作一些动画:

while not Terminated do 
begin
// some code....

// draw onto the Window DC
DC := GetDC(FWnd); // FWnd is the Window Handle
// DC := GetDCEx(FWnd, 0, DCX_VALIDATE or DCX_LOCKWINDOWUPDATE);
if DC <> 0 then
  try
    BitBlt(DC,
      FPaintRect.Left,
      FPaintRect.Top,
      ImageRect.Right,
      ImageRect.Bottom,
      Bitmap.Canvas.handle,
      0, 0,
      SRCCOPY);
  finally
    ReleaseDC(FWnd, DC);
  end;

  // more code....

end; // end while

它是线程安全的,还是我应该以某种方式锁定DC?

另外,我可以使用GetDCEx吗? 感谢。

1 个答案:

答案 0 :(得分:2)

不,假设在主(GUI)线程中创建了窗口句柄(FWnd),则代码不是线程安全的。标准的VCL方法是通过Synchronize类的QueueTThread方法在GUI线程中调用所有GDI函数。