Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.11.07;
Скачать: CL | DM;

Вниз

Тормоза с чтением каритнки в VCL вторым потоком   Найти похожие ветки 

 
Kogor   (2004-10-20 13:35) [0]

Привет всем!
Проблема такая. Использую набор VCL CoolControls, в частности CoolScrollingText Он находится в основном потоке на главной форме. Основной поток занимается тем что прокручивает в этой компоненте некий текст. Второй поток занимается тем что слушает директорию и когда в ней появляется файл (жипег, размер гдето 1 - 3Мб) загружает его в VCL CoolImages (почти тоже самое что и ImageList) используя процедуру LoadFromFile(наследована из TPicture). Дык вот сама проблема в том, что когда я читаю картинку в память скроллинг начинает нещадно тормозить... так как загрузка проца вторым потоком прыгает до 100% Пробовал понизить приоритет, таже фигня. Есть какие нибудь идеи как разрешить проблему? Скроллинг не должен тормозить ни в коем случае...  Может есть какие совсем другие варианты загрузки жипега и последующего его вывода на экран?
Заранее всем спасибо за советы!
Горбунов Константин


 
Digitman ©   (2004-10-20 13:45) [1]


> Основной поток занимается тем что прокручивает в этой компоненте
> некий текст


не верю.
скорей всего CoolScrollingText неявно создает доп.трэд, собственно и "крутящий" текст, а осн.трэд занят только визуализацией очер.кадра, построенного доп.трэдом


 
Kogor   (2004-10-20 13:52) [2]

В общем то да, так оно и есть, он создает дополнительный поток который и крутит текст. Просто я об этом не написал. А причем здесь он?


 
Digitman ©   (2004-10-20 13:56) [3]


> причем здесь он?


ни при чем.
просто будь уверен в декларированных тобой утверждениях.

а по сабжу  - файловые операции на уровне системы (LoadFromFile стартует именно таковую операцию) имеют весьма высокий приоритет


 
Kogor   (2004-10-20 16:01) [4]

А может написать самому процедуру загрузки картинки в память а потом из памяти уже выгружать в VCL Тогда в процессе загрузки файла я могу приостанавливать процесс считывания и распеделить процессорное время между потоками. Только вот как рочитать файл в память а потом его еще и загрузить в TPicture? Можно как то использовать LoadFromStream?


 
Digitman ©   (2004-10-20 16:11) [5]

приведи полный код метода Execute доп.треда ... ну или хотя бы то место в коде, где идет обращение к файлу для его чтения методом loadFromFile


 
Kogor   (2004-10-20 16:34) [6]

в общем то ничего не обычного нету

IsItNewFile - заменил часть кода этой функцией, а вообще она опеределяет новый ли файл и если он новый то вставляем в CoolImages

procedure TPicDirThread.Execute;
var
 R: Cardinal;
 f: THandle;
begin
 f := FindFirstChangeNotification(PChar(strDirToMonitor), false, FILE_NOTIFY_CHANGE_FILE_NAME);
 try
   if  f <> INVALID_HANDLE_VALUE then
   begin
     repeat
       R := WaitForSingleObject(f, INFINITE);
       if R = WAIT_OBJECT_0 then
       begin
         if IsItNewFile then               ThreadCoolImages.Images.Add.Picture.LoadFromFile(strPicPath);
       end;
       if not FindNextChangeNotification(f) then Break;
     until Terminated;
   end;
 finally
   FindCloseChangeNotification(f);
 end;
end;



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

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

Наверх




Память: 0.48 MB
Время: 0.028 c
3-1096868940
Галинка
2004-10-04 09:49
2004.11.07
Как создать таблицу ADO+Access...


4-1096671072
НовичОк
2004-10-02 02:51
2004.11.07
Заголовки кнопок в другом приложении


1-1098280050
zorik
2004-10-20 17:47
2004.11.07
Maximized window


6-1094038614
MadHead
2004-09-01 15:36
2004.11.07
как запустить/закрыть сторонее приложение на удаленном компе в ло


1-1098269944
SPeller
2004-10-20 14:59
2004.11.07
Varinat и set - можно подружить?