Главная страница
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.058 c
1-1098793672
dim_
2004-10-26 16:27
2004.11.07
Paint


14-1098080502
Prohodil Mimo
2004-10-18 10:21
2004.11.07
Цифровой фотоаппарат Canon Powershot A75. Что вы о нём думаете?


1-1098358854
Wolffgang
2004-10-21 15:40
2004.11.07
Непонятки с LoadFromFile


3-1096997486
GanibalLector
2004-10-05 21:31
2004.11.07
IBExpert


1-1098647524
MegaBonus
2004-10-24 23:52
2004.11.07
Почему замедляется работа процедуры?