Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.02.27;
Скачать: CL | DM;

Вниз

Т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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.013 c
1-87406
Vitus
2003-02-18 10:33
2003.02.27
Как создать ярлык на рабочем столе?


14-87649
Тень
2003-01-22 15:40
2003.02.27
Как увидеть Win95-98 под ХР


14-87654
SergeN
2003-02-10 14:27
2003.02.27
Не понимаю я!


6-87601
M_a_x
2003-01-11 01:17
2003.02.27
Помогите с WebBrowser ом


1-87554
Leviathan
2003-02-17 12:39
2003.02.27
Классы