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

Вниз

обратиться к потоку в рантайм   Найти похожие ветки 

 
stud ©   (2005-07-22 11:38) [0]

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


 
GLFox ©   (2005-07-22 11:41) [1]

Поток может проверять сам какие-либо данные. А шоб не было конфликта юзай CriticalSection


 
evvcom ©   (2005-07-22 11:48) [2]


> с компанентами проще можно по findcomponent

Можно, но не нужно. А нужно в переменных объекты запоминать. Тогда и проблем меньше будет.
А вообще API функция какая-то есть для этих целей. Не помню, какая. Сейчас кто-нить подскажет.


 
stud ©   (2005-07-22 12:02) [3]


> А нужно в переменных объекты запоминать

это как?


 
Alexander Panov ©   (2005-07-22 12:09) [4]


TMyThread=class(TThread)
private
  FCode: Integer;
  ...
public
  ...
  property Code: Integer read FCode;
end;

MyThread := TMyThread.Create();

ShowMessage(IntToStr(MyThread.Code));


 
stud ©   (2005-07-22 12:14) [5]

а если потоков несколько?
и они динамически содаются
каким образом например можно изменить Fcode?


 
stud ©   (2005-07-22 12:16) [6]

у меня такой код, в цикле несколько штук создается (насколько это правильно или не правильно сейчас не важно) как изменить св-ва любого из них?
with TMonDirThread.Create(false) do
   begin
     name:="thread"+inttostr(i);      DirPath:=settingfile.ReadString(sectionini.Strings[i],"f_dir","..");
     outgrid:=(form1.FindComponent("stringgrid"+inttostr(i)) as Tstringgrid);      file_mask:=settingfile.ReadString(sectionini.Strings[i],"fmask","*.log");      key_fraze:=settingfile.ReadString(sectionini.Strings[i],"r_key","");
   end;


 
Alexander Panov ©   (2005-07-22 12:23) [7]

stud ©   (22.07.05 12:14) [5]

Ну все сразу тебе расскажи...

stud ©   (22.07.05 12:14) [5]
а если потоков несколько?
и они динамически содаются


Хранишь список потоков, иначе - никак.
Например - TList, TObjectList, array of TMayThread и т.п.

Для изменения и чтения и спользуй критические секции (см. TCriticalSection).

примерно это выглядит так:

TMyThread=class(TThread)
private
  FCode: Integer;
  FCS: TCriticalSection;
  ...
  function GetCode: Integer;
  procedure SetCode(Value: Integer);
public
  constructor Create(...);
  destructor
  ...
  property Code: Integer read GetCode write SetCode;
end;

constructor TMyThread.Create(...)
begin
  ...
  FCS := TCriticalSection.Create;
end;

destructor TMyThread.Destroy(...)
begin
  ...
  FCS.Free;
  inherited;
end;

function TMyThread.GetCode: Integer;
begin
  FCS.Enter;
  Result := FCode;
  FCS.Leave;
end;

procedure TMyThread.SetCode(Value: Integer);
begin
  FCS.Enter;
  FCode := Value;
  FCS.Leave;
end;

MyThread := TMyThread.Create();

ShowMessage(IntToStr(MyThread.Code));


 
TUser ©   (2005-07-22 12:45) [8]

Для отслеживания изменений в конкретном каталоге существуют специальные api-функции. Доп. поток обычно не нужен.


 
Digitman ©   (2005-07-22 12:51) [9]


> обратиться к потоку в рантайм


поток (в дан.случае - объект класса-наследника TThread) в этом плане НИЧЕМ не отличается от любого иного объекта (наследника TObject)


 
Fay ©   (2005-07-22 13:09) [10]

2 stud ©   (22.07.05 11:38)
Бредятина какая-то. К тому же не понятно, для чего сделано уточнение "в рантайм"? Типа в design-time проблема решена, осталось только разобраться с run-time. 8)

>> с компанентами проще можно по findcomponent
Зачем искать? Никто ведь не ищет, извините, попу приходя в туалет! Где искать? Я (к примеру) не брал. Может быть это Digitman спрятал, а теперь в несознанку ударился?


 
Digitman ©   (2005-07-22 13:15) [11]


> Fay ©   (22.07.05 13:09) [10]


не-а, не прятал ..

"- Шпака брал ?
- Казань брал, Киев брал ... Шпака ... не брал .." (с)


 
stud ©   (2005-07-22 13:35) [12]


> Fay ©   (22.07.05 13:09) [10]

весьма содержательный пост

> для чего сделано уточнение "в рантайм"?

это настолько принципиально????

> Никто ведь не ищет, извините, попу приходя в туалет!

так попа не всегда нужна


 
stud ©   (2005-07-22 13:36) [13]


> TUser ©   (22.07.05 12:45) [8][Ответить]

а можно подробнее? где их искать?


 
Fay ©   (2005-07-22 13:38) [14]

2 stud ©   (22.07.05 13:35) [12]

Ладно, будем по шагам.
Вам ответили "А нужно в переменных объекты запоминать", на что Вы среагировали "это как?".
По моему, этого достаточно для прописки в орешнике - Вы действительно не знаете как?


 
Alexander Panov ©   (2005-07-22 13:43) [15]

TUser ©   (22.07.05 12:45) [8]
Для отслеживания изменений в конкретном каталоге существуют специальные api-функции. Доп. поток обычно не нужен.


Где-то было упоминание об используемых средствах?
Потоки нужны для того, что бы выполняли свою функцию.


 
stud ©   (2005-07-22 13:47) [16]


> Fay ©   (22.07.05 13:38) [14]

это я знаю, но как это применить в моем случае?
сколько нужно переменных заранее не известно

> Alexander Panov ©   (22.07.05 12:23) [7][Ответить]
>Хранишь список потоков, иначе - никак.
> Например - TList, TObjectList, array of TMayThread и
> т.п.

вот это уже понятно


 
Digitman ©   (2005-07-22 13:52) [17]


> это настолько принципиально?


ну ты же упомянул)
значит, для тебя это принципиально ?
или всуе упомянул ?)


> попа не всегда нужна


она нужна там где нужна
и в сортире, думаю, нужна в первую очередь

иначе, согласись, глупо как-то получается - бамажка есть, заготовил с вечера еще, а задницу сейчас попытаемся найти, если получится)

а теперь - по сабжу..

выполнив
with TMonDirThread.Create(false) do
ты создал объект (по колено - поток там или не поток ! .. просто некий объект) и нигде не зафиксировал ссылку на него, тем самым фактически потеряв его в памяти

а чтобы обратиться к ранее созданному объекту нужно знать, где он в памяти находится ..

куда уж проще было при создании объекта тут же запомнить его адрес, хотя бы так :

var MonDirThread: TMonDirThread;
..
MonDirThread := TMonDirThread.Create(false);
with MonDirThread do ..


 
stud ©   (2005-07-22 14:00) [18]

т.е. в моем случае примерно так?
var
thread_ar : array of TMonDirThread;

thread_ar[i]:=TMonDirThread.Create(false);
with thread_ar[i] do
begin


 
Digitman ©   (2005-07-22 14:01) [19]

можно и так ... криминала в том нет ..


 
evvcom ©   (2005-07-22 16:37) [20]


> stud ©   (22.07.05 14:00) [18]

Только не забудь SetLength сделать, а то сейчас еще на 20 постов вопросов будет типа "А почему у меня Range checking error выскакивает?" да "Access Violation".



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

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

Наверх





Память: 0.5 MB
Время: 0.02 c
14-1121793975
NewWonder
2005-07-19 21:26
2005.08.14
Антагонистический класс - что ето?


1-1122357061
Sectey
2005-07-26 09:51
2005.08.14
Есть ли ключ компилятора


14-1121937646
Дмитрий_Б
2005-07-21 13:20
2005.08.14
Не открываются архивы старых форумов


3-1120634051
vitzol
2005-07-06 11:14
2005.08.14
Подсветка символов в DBgrid при фильтрации


14-1122134717
Shuric
2005-07-23 20:05
2005.08.14
О мониторе





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