Является ли мой код выполнения потокобезопасным? - PullRequest
0 голосов
/ 26 декабря 2011

На основании этой статьи :

Я использую этот код для создания анимации в заданном дескрипторе окна при выполнении какой-либо работы с моей базой данных:

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 Ответ

2 голосов
/ 26 декабря 2011

Нет, ваш код не является потокобезопасным, если предположить, что дескриптор окна (FWnd) создан в основном потоке (GUI). Стандартный подход VCL заключается в вызове всех функций GDI в потоке GUI с помощью Synchronize или Queue методов класса TThread.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...