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

Вниз

ТThread не работает так как надо.   Найти похожие ветки 

 
Tundra   (2003-02-17 16:26) [0]

Я закидываю в нить процедуру обр-ки файла. Он у меня все обрабатывает но во время обработки приложение недоступно.
Т.е. от ТThread нет никакого эффекта. Я даже Terminate не могу сделать.
В чем дело ?
Спасибо.
Код примерно такой:

procedure TreatmentFile();
var i:integer;
begin
FormMain.memo1.Clear;
{- обр-ка file -}
FormMain.memo1.text:= FormMain.memo1.text+chr(13)+chr(10)+{результаты обр-ки} ;
FormMain.memo1.repaint;
end ;



procedure t.Execute;
begin
synchronize(TreatmentFile);

end;


 
Digitman   (2003-02-17 16:32) [1]

признайся, где пример содрал ?)


 
Tundra   (2003-02-17 16:45) [2]

Какая разница? В книжках что-то было.


 
Digitman   (2003-02-17 16:55) [3]

Разница ощутимая) ... Хоть с книжки хоть не с книжки, но содрал ты его бездумно, а теперь паришься с неработающим (как тобой ожидалось) кодом

Синхронизировать с основным потоком (см. Synchronize) следует только те участки кода доп.потока, которые поточнонебезопасны.

Например, каков смысл синхронизации с осн.потоком вот этого
{- обр-ка file -}

?


Вот это

FormMain.memo1.text:= FormMain.memo1.text+chr(13)+chr(10)+{результаты обр-ки} ;

это - да , нужно синхронизировать

а вот это

FormMain.memo1.repaint;

вообще лишнее



 
han_malign   (2003-02-17 16:58) [4]

ага, вероятно - procedure TreatmentFile(aSelf: TOject) - только в этом случае стек засираться не будет. Но все равно в Thread-е забивать главную очередь приложения синхронными сообщениями...

тогда-уж:

procedure TreatmentFile(Self: T);
var i:integer;
begin
FormMain.memo1.Clear;
FormMain.memo1.text:= FormMain.memo1.text+chr(13)+chr(10)+ Self.{результаты обр-ки} ;
FormMain.memo1.repaint;
end ;

procedure t.Execute;
begin
{- обр-ка file -}
synchronize(TreatmentFile);

end;


 
panov   (2003-02-17 17:06) [5]

1. Вся обработка ( в данном случае - работа с файлом) должна выполняться в процедуре Execute
2. Процедура Synchronize выполняется в контексте основного потока и вызываться только в крайне необходимых случаях.
3. FormMain.memo1.repaint выполнять не надо.



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

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

Наверх





Память: 0.45 MB
Время: 0.008 c
8-87573
Валентин
2002-11-13 15:04
2003.02.27
БПФ


1-87408
Garmahis
2003-02-18 10:43
2003.02.27
Cкроллинг текста


8-87572
Helg
2002-11-12 19:44
2003.02.27
Как незаметно перерисовать форму?


1-87454
jiura
2003-02-18 20:25
2003.02.27
MDI.


1-87503
Andrey_S
2003-02-13 17:14
2003.02.27
Кнопки как в FrontPage слева





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