![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
обратиться к потоку в рантайм
stud © (2005-07-22 11:38:00)в рантайм создаю поток, который следит за изменением нужного каталога.
все работает, но как обратиться к этому самому потоку в рантайм?
измнить какое ибо из его свойств?
с компанентами проще можно по findcomponent а как быть с потоком?
evvcom (2005-07-22 16:37:00) [1]
> stud © (22.07.05 14:00) [18]
Только не забудь SetLength сделать, а то сейчас еще на 20 постов вопросов будет типа "А почему у меня Range checking error выскакивает?" да "Access Violation".
Digitman (2005-07-22 14:01:00) [2]можно и так ... криминала в том нет ..
stud (2005-07-22 14:00:00) [3]т.е. в моем случае примерно так?
var
thread_ar : array of TMonDirThread;
thread_ar[i]:=TMonDirThread.Create(false);
with thread_ar[i] do
begin
Digitman (2005-07-22 13:52:00) [4]
> это настолько принципиально?
ну ты же упомянул)
значит, для тебя это принципиально ?
или всуе упомянул ?)
> попа не всегда нужна
она нужна там где нужна
и в сортире, думаю, нужна в первую очередь
иначе, согласись, глупо как-то получается - бамажка есть, заготовил с вечера еще, а задницу сейчас попытаемся найти, если получится)
а теперь - по сабжу..
выполнив
with TMonDirThread.Create(false) do
ты создал объект (по колено - поток там или не поток ! .. просто некий объект) и нигде не зафиксировал ссылку на него, тем самым фактически потеряв его в памяти
а чтобы обратиться к ранее созданному объекту нужно знать, где он в памяти находится ..
куда уж проще было при создании объекта тут же запомнить его адрес, хотя бы так :
var MonDirThread: TMonDirThread;
..
MonDirThread := TMonDirThread.Create(false);
with MonDirThread do ..
stud (2005-07-22 13:47:00) [5]
> Fay © (22.07.05 13:38) [14]
это я знаю, но как это применить в моем случае?
сколько нужно переменных заранее не известно
> Alexander Panov © (22.07.05 12:23) [7][Ответить]
>Хранишь список потоков, иначе - никак.
> Например - TList, TObjectList, array of TMayThread и
> т.п.
вот это уже понятно
Alexander Panov (2005-07-22 13:43:00) [6]TUser © (22.07.05 12:45) [8]
Для отслеживания изменений в конкретном каталоге существуют специальные api-функции. Доп. поток обычно не нужен.
Где-то было упоминание об используемых средствах?
Потоки нужны для того, что бы выполняли свою функцию.
Fay (2005-07-22 13:38:00) [7]2 stud © (22.07.05 13:35) [12]
Ладно, будем по шагам.
Вам ответили "А нужно в переменных объекты запоминать", на что Вы среагировали "это как?".
По моему, этого достаточно для прописки в орешнике - Вы действительно не знаете как?
stud (2005-07-22 13:36:00) [8]
> TUser © (22.07.05 12:45) [8][Ответить]
а можно подробнее? где их искать?
stud (2005-07-22 13:35:00) [9]
> Fay © (22.07.05 13:09) [10]
весьма содержательный пост
> для чего сделано уточнение "в рантайм"?
это настолько принципиально????
> Никто ведь не ищет, извините, попу приходя в туалет!
так попа не всегда нужна
Digitman (2005-07-22 13:15:00) [10]
> Fay © (22.07.05 13:09) [10]
не-а, не прятал ..
"- Шпака брал ?
- Казань брал, Киев брал ... Шпака ... не брал .." (с)
Fay (2005-07-22 13:09:00) [11]2 stud © (22.07.05 11:38)
Бредятина какая-то. К тому же не понятно, для чего сделано уточнение "в рантайм"? Типа в design-time проблема решена, осталось только разобраться с run-time. 8)
>> с компанентами проще можно по findcomponent
Зачем искать? Никто ведь не ищет, извините, попу приходя в туалет! Где искать? Я (к примеру) не брал. Может быть это Digitman спрятал, а теперь в несознанку ударился?
Digitman (2005-07-22 12:51:00) [12]
> обратиться к потоку в рантайм
поток (в дан.случае - объект класса-наследника TThread) в этом плане НИЧЕМ не отличается от любого иного объекта (наследника TObject)
TUser (2005-07-22 12:45:00) [13]Для отслеживания изменений в конкретном каталоге существуют специальные api-функции. Доп. поток обычно не нужен.
Alexander Panov (2005-07-22 12:23:00) [14]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));
stud (2005-07-22 12:16:00) [15]у меня такой код, в цикле несколько штук создается (насколько это правильно или не правильно сейчас не важно) как изменить св-ва любого из них?
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;
stud (2005-07-22 12:14:00) [16]а если потоков несколько?
и они динамически содаются
каким образом например можно изменить Fcode?
Alexander Panov (2005-07-22 12:09:00) [17]
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:02:00) [18]
> А нужно в переменных объекты запоминать
это как?
evvcom (2005-07-22 11:48:00) [19]
> с компанентами проще можно по findcomponent
Можно, но не нужно. А нужно в переменных объекты запоминать. Тогда и проблем меньше будет.
А вообще API функция какая-то есть для этих целей. Не помню, какая. Сейчас кто-нить подскажет.
GLFox (2005-07-22 11:41:00) [20]Поток может проверять сам какие-либо данные. А шоб не было конфликта юзай CriticalSection