Вверх ↑
Ответов: 9906
Рейтинг: 351
#1: 2008-01-20 10:05:33 ЛС | профиль | цитата
Откуда я знаю, почему...
У тебя же была мысль перевести ВСЕ мероприятия в один поток
Собственно, я это и имел ввиду, когда говорил про INFINITE
Т.е примерно такое

#pas
...
procedure MyCallback(pCtx:pointer; pUserData:pointer); stdcall;
var pCls:THiImageLoader;
begin
pCls := THiImageLoader(pUserData);
SetEvent(pCls.hOK);
// и больше НИЧЕГО!!!
end;
procedure THiImageLoader._work_doLoad;
...
FImgCtx.SelectChanges(IMGCHG_COMPLETE,0,1);
WaitForSingleObject(hOK,INFINITE);
...
Если уж такое "все безобразие уснуло надолго (повисло просто)", или "начисто отказывается рисовать на Bitmap.Canvas.Handl'e"
-- тогда это нечистая сила, однако.

------------ Дoбавленo:

Вообще-то, если сторонний поток (в котором предположим работает MyCallBack) сотворяет какое-то действие связанное как-то с SendMessage для хэндла основного потока (собственно, почти любое обращение к визуальному элементу), то он уходит в слип до тех пор, пока основной поток не сделает обращение к очереди сообщений (GetMessage или PeekMessage).
А отсюда не один логический выход (сделать эти самые GetMessage или PeekMessage), а два -- еще и НЕ делать действий, "связанных как-то с SendMessage для хэндла основного потока" в этом стороннем потоке.
карма: 9

0