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

Вниз

Работа с потоком   Найти похожие ветки 

 
Yandexman   (2005-06-01 12:39) [0]

Как заставить загрузить Memo1 файл, в отдельном потоке?


 
Alex Konshin ©   (2005-06-01 12:43) [1]

Практически никак. VCL не поддерживает multithread. И еще потому, что никто так не делает.
Если файл настолько большой, что нужно загрузка в отдельной нити, то это значит, что не надо использовать Memo.
Кстати, а с чего ты решил, что так будет быстрее?


 
Digitman ©   (2005-06-01 12:48) [2]


> Yandexman   (01.06.05 12:39)  
> Как заставить загрузить Memo1 файл, в отдельном потоке?


точно так же как и в основном потоке
грабли будут только если в этот момент Memo.Visible=True


 
Юрий Зотов ©   (2005-06-01 12:55) [3]

В принципе, можно попробовать поиграться с BeginUpdate - EndUpdate (то есть, заблокировать перерисовку Memo на время работы загружающего потока) - но смысл этого все же непонятен.


 
Yandexman   (2005-06-01 13:30) [4]


> Кстати, а с чего ты решил, что так будет быстрее?

Не быстрее, просто во время загрузки можно делать другие задачи.
Application.processmessages не подойдет так как виснет во время операции открытия...

> В принципе, можно попробовать поиграться с BeginUpdate -
> EndUpdate (то есть, заблокировать перерисовку Memo на время
> работы загружающего потока) - но смысл этого все же непонятен.

Тоже непонянтно,попытка сделать memo1.loadfromfiles() ни к чему не приводит, результат тот же, виснит.


 
Alex Konshin ©   (2005-06-01 13:39) [5]

Ты код-то покажи. И объясни зачем тебе это надо.
Можно загрузить в TStringList, а потом Assign в Memo. Только опять-таки смысла не вижу. Как раз-таки другие задачи нужно делать в других потоках, основной поток нужен для UI.
Ты просто выбрал неверный способ отображения.
Чем пользоваться? На вскидку не скажу, у меня для таких целей свои компоненты. В любом случае большой текст в мемо - неудобен для просмотра.


 
Digitman ©   (2005-06-01 13:39) [6]


> Yandexman   (01.06.05 13:30) [4]


у Мемо нет метода loadfromfile, он есть у TStrings, каковым явл-ся св-во Мемо.Lines

никто не запрещает загружать TStrings в доп.потоке, важно лишь помнить, что если компонент видимый или не запрещены обновления его канвы, рано или поздно после загрузки приключатся грабли.


> виснит


заключай тело Execute в try..except и выясняй причины "виса"


 
Alx2 ©   (2005-06-01 13:40) [7]

Yandexman   (01.06.05 13:30) [4]

Большой файл? Сколько строк?


 
-=XP=- ©   (2005-06-01 14:38) [8]

TLoadThread = class(TThread)
private
 FMemo: TMemo;
 FFileName: string;
 FStrings: TStringList;
protected
 procedure Apply;
 procedure Execute; override;
public
 constructor Create(AMemo: TMemo; const AFileName: string); reintroduce;
end;

constructor TLoadThread.Create(AMemo: TMemo; const AFileName: string);
begin
 inherited Create(True);
 FMemo := AMemo;
 FFileName := AFileName;
 Resume;
end;

procedure TLoadThread.Execute;
begin
 FStrings := TStringList.Create;
 try
   FStrings.LoadFromFile(FFileName);
   if not Terminated then
     Synchronize(Apply);
 finally
   FStrings.Free;
 end;
end;

procedure TLoadThread.Apply;
begin
 FMemo.Lines.Assign(FStrings);
end;


С моей точки зрения, это максимум того, что можно вынести в отдельный поток. Основная видимая задержка будет в методе Apply. Для того, чтобы исключить эту задержку, необходимо переопределять класс TMemo и работать не с суррогатным TStringList (в примере - FStrings), а с инкапсулированным хранилищем строк TStrings (или кто он там?) класса TMemo.


 
Yandexman   (2005-06-01 15:04) [9]

Понятно, то есть лучше применить SunEdit чем городить свое, вы это хотели сказать


 
-=XP=- ©   (2005-06-01 15:18) [10]

Я этого не говорил. :)
Если есть под рукой готовый рабочий компонент, то, конечно же, изобретать велосипед не стоит. Но если такого компонента нет, или же имеющийся компонент не обеспечивает всей нужной функциональности - то тут уж лучше засучить рукава и, взяв за основу один из классов VCL, разрабатывать самому.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.04 c
1-1118225959
Andy BitOff
2005-06-08 14:19
2005.06.29
Надо послать сообщение своей программе.


1-1118208998
MarS
2005-06-08 09:36
2005.06.29
Прокрутить Image


1-1118222047
РВА
2005-06-08 13:14
2005.06.29
Пароль при загрузке формы из DLL


14-1117443817
Serg1981
2005-05-30 13:03
2005.06.29
Русский текст на BitBtn


1-1118068149
Alex17
2005-06-06 18:29
2005.06.29
Дозвон до провайдера





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