Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.11.07;
Скачать: [xml.tar.bz2];

Вниз

Тормоза с чтением каритнки в 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.065 c
1-1098348907
ljurik
2004-10-21 12:55
2004.11.07
Как узнать тип поинтера


14-1098084392
Реактор
2004-10-18 11:26
2004.11.07
Самопроизвольное выключение компьютера


9-1088621303
kas-t
2004-06-30 22:48
2004.11.07
GLScene: плавное падение fps


14-1098210482
AKM
2004-10-19 22:28
2004.11.07
БПФ


1-1098788331
dr_
2004-10-26 14:58
2004.11.07
ImageList





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский