Главная страница
    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.46 MB
Время: 0.051 c
14-1098269351
YurikGL
2004-10-20 14:49
2004.11.07
ОСТ-ы по связи???


14-1098092835
Gari
2004-10-18 13:47
2004.11.07
Как много изменений в новой версии Delphi


14-1098039450
Барбос
2004-10-17 22:57
2004.11.07
фракталы и система координат


1-1098562792
redlord
2004-10-24 00:19
2004.11.07
opendialog+multiselect


4-1096553699
united
2004-09-30 18:14
2004.11.07
Написать принтер





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский