![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Тормоза с чтением каритнки в VCL вторым потоком [D7, Win2k]
Kogor © (2004-10-20 13:35:00)Привет всем!
Проблема такая. Использую набор VCL CoolControls, в частности CoolScrollingText Он находится в основном потоке на главной форме. Основной поток занимается тем что прокручивает в этой компоненте некий текст. Второй поток занимается тем что слушает директорию и когда в ней появляется файл (жипег, размер гдето 1 - 3Мб) загружает его в VCL CoolImages (почти тоже самое что и ImageList) используя процедуру LoadFromFile(наследована из TPicture). Дык вот сама проблема в том, что когда я читаю картинку в память скроллинг начинает нещадно тормозить... так как загрузка проца вторым потоком прыгает до 100% Пробовал понизить приоритет, таже фигня. Есть какие нибудь идеи как разрешить проблему? Скроллинг не должен тормозить ни в коем случае... Может есть какие совсем другие варианты загрузки жипега и последующего его вывода на экран?
Заранее всем спасибо за советы!
Горбунов Константин
Kogor (2004-10-20 16:34:00) [1]в общем то ничего не обычного нету
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;
Digitman (2004-10-20 16:11:00) [2]приведи полный код метода Execute доп.треда ... ну или хотя бы то место в коде, где идет обращение к файлу для его чтения методом loadFromFile
Kogor (2004-10-20 16:01:00) [3]А может написать самому процедуру загрузки картинки в память а потом из памяти уже выгружать в VCL Тогда в процессе загрузки файла я могу приостанавливать процесс считывания и распеделить процессорное время между потоками. Только вот как рочитать файл в память а потом его еще и загрузить в TPicture? Можно как то использовать LoadFromStream?
Digitman (2004-10-20 13:56:00) [4]
> причем здесь он?
ни при чем.
просто будь уверен в декларированных тобой утверждениях.
а по сабжу - файловые операции на уровне системы (LoadFromFile стартует именно таковую операцию) имеют весьма высокий приоритет
Kogor (2004-10-20 13:52:00) [5]В общем то да, так оно и есть, он создает дополнительный поток который и крутит текст. Просто я об этом не написал. А причем здесь он?
Digitman (2004-10-20 13:45:00) [6]
> Основной поток занимается тем что прокручивает в этой компоненте
> некий текст
не верю.
скорей всего CoolScrollingText неявно создает доп.трэд, собственно и "крутящий" текст, а осн.трэд занят только визуализацией очер.кадра, построенного доп.трэдом