Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.08.15;
Скачать: 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 вся ветка

Текущий архив: 2002.08.15;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.01 c
1-48124
HIDDEN
2002-07-31 17:36
2002.08.15
EVAL etc


7-48325
ЗГ
2002-05-23 07:32
2002.08.15
Люди не подскажите как в виндах и в ХР прописать прогу, которая


14-48307
RomanKulhc
2002-07-18 19:23
2002.08.15
Vinchestery Fujitsu


3-47976
X-jedy
2002-07-25 16:55
2002.08.15
MySql-ный VarChar


1-48113
malamba
2002-08-05 09:43
2002.08.15
Как уведомить клиентов об изменении базы