Форум: "Основная";
Текущий архив: 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