Вниз
Скачать: CL | DM;

Рисующий Thread   Найти похожие ветки 

 
А. Тимофеев   (2002-08-02 09:44) [0]

Привет.

Есть DLL в которой реализван объект TMyObj с функцией funcPaint, рисующей графику на заданный HDC.
Для работы с этим объектом сначала вызывается функция инициализации funcInit, которая возвращает номер NN этого объекта в потоковом TThreаdList.
Далее приложение обращается к каждому объекту TMyObj по этому номеру

например, для вызова перерисовки: funcPaint(NN, HDC)

При создании нескольких объектов TObj в отдельных потоках (создается поток, в потоке окно и экземпляр TObj, который рисует в это окно) функция funcPaint падает.
Но если использовать LockList перед вызовом funcPaint

function funcPaint(NN, HDC);
begin
with DllThreadList.LockList do
MyObj:= TMyObj(Items[NN-1]);
MyObjPaint(HDC);
DllThreadList.UnlockList;
end;

то так все работает без ошибок, но хочется сделать так:

function funcPaint(NN, HDC);
begin
with DllThreadList.LockList do
MyObj:= TMyObj(Items[NN-1]);
DllThreadList.UnlockList;
funcPaint(NN, HDC);
end;

но этот вариант работает всего несколько перерисовок, а затем валится. В чем может быть причина, глобальных переменных в DLL вроде нет.

Функция рисования самого TMyObj имеет такую структуру

procedure TMyObj.MyObjPaint(HDC);
var
Canvas: TCanvas;
begin
Canvas:= TCanvas.Create;
Canvas.Handle:= HDC;
try
вывод графики на Canvas
finally
Canvas.Free;
end;
end;

В чем может быть причина?


 
MBo ©   (2002-08-02 09:48) [1]

Canvas.Lock не спасет?


 
Zelius ©   (2002-08-02 10:38) [2]

У потока есть такой метод - Synchronize, почитай про него в Хелпе, может поможет... В демках с потоками он используется, можно там подсмотреть....



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.009 c
1-48031
Вечно молодой
2002-08-03 18:35
2002.08.15
TStringList


3-47984
Roma111
2002-07-26 15:56
2002.08.15
XP в IB6


1-48169
Belov
2002-08-02 13:22
2002.08.15
Как получить пусть к папке Start - Programs


7-48330
esprit_bel
2002-06-01 10:12
2002.08.15
раскладка


1-48023
SPeller
2002-08-03 08:29
2002.08.15
Вопрос о константах




   Наверх