Форум: "Основная";
Текущий архив: 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.012 c