Вниз
Скачать: 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
14-48270
A2
2002-07-19 17:08
2002.08.15
вопрос


1-48086
Programmer1
2002-08-01 15:58
2002.08.15
Управление COM - сервером Excel


14-48262
doroshka
2002-07-17 19:15
2002.08.15
Посоветуйте компонент или как сделать, чтоб в меню прятались...


1-48159
Andy BitOff
2002-08-02 08:00
2002.08.15
Excel


4-48369
izved
2002-06-05 17:57
2002.08.15
Нужна помощь




   Наверх