Форум по программированию Delphi Sources

 



Вернуться   Форум по программированию Delphi Sources > Все о Delphi > Компоненты и классы
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 28.02.2006, 17:04
SamProf SamProf вне форума
Прохожий
 
Регистрация: 28.02.2006
Сообщения: 1
Репутация: 10
Сообщение Морока с потоками

Вопрос долгий и нудный, но мне нужно в нём разобраться! вопрос пишу в клубе, поэтому кое-где буду сокращать(...)
Есть
TmyStrGrid=class(Tstringgrid)
mycl:TmyClass;
procedure drawcell(.....)
procedure dbclick(....);
end;

Tmyclass=class
data:TList;
th:TMyThread;
constructor cretate;
destructor free;
procedure run;
procedure obrabotka;
end;

TMyThread=class(TThread)
procedure execute;
end;

Методы описаны примерно так:

procedure Tmystrtinggrid.drawcell;
begin
{берём дванные из mycl.data и чёто рискем}
end;

procedure Tmystringgrid.dbclick;
begin
mycl.run;
end;

procedure TMyclass.run;
begin
th:=TmyThread.create;
end;

procedure TMyclass.obrabotka;
begin
{обработка данных в mycl.data - длительная}
end;

procedure tmythread.execute;
begin
mycl.obrabotka;
ebd;

ну вроде кода немного написал, а теперь рускими словами.
Есть некотрый stringgrid, у него есть свой mycl: tmyclass - из него он черпает свои данные для прорисовки, а именно из mycl.data. При двойном щелчке на гриде эти данные должны быть изменены - этот процесс может занять длительное время, мало того возможно его придётся прервать не дожидаясь окончания. Этот поток должен запустить процедуру в классе TmyClass(obrabotka).
Теперь получается:
Грид вызывает метод внутреннего класса, чтобы он создал поток на обработку данных. Естественно, что во время этого данные эти читать нельзя, но грид должен жить своей жизнью - просто рисовать другие данные - к примеру анимацию. Этот поток ваполняет в своём коде метод TMyClass, а потом какимто действием должен по окончании работы должен сказать гриду что он закончил и заставить Грид перерисоваться.
Мало, того если грид захочет, то он может этот поток завершить и запустить новый. Вот такая вот загагулина! Если кто-то понял, что я хотел выразить, то помогите пожайлуста!

а как вызвать эго из функции Obrabotka и как в ней делать Synchronize? ведь этот метод не потока, а работает в другом потоке!
Ответить с цитированием
Ответ



Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:02.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources", 2004-2019

ВКонтакте   Facebook   Twitter