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

Вниз

Как удалить объект из дочернего потока   Найти похожие ветки 

 
Priest ©   (2006-10-19 09:18) [40]

Пусик,  Сергей М.

Да знаю  я это. Проблема в том, что стандартная реализация секции предпологает ожидание критической секции в aquire бесконечно долго. А мне нужно чтобы ждало определённое время. Поэтому я использовал эвент. Он позволяет ожидать заданое время. Но он не позволяет захватить его дважды из одного потока. Поэтому я изменил стандартную реализацию


 
Priest ©   (2006-10-19 09:25) [41]

>>i-am-vladko ©   (18.10.06 16:27) [32]
>>а это еще че?
>>if Thread.Suspended then
>>  Thread.Resume();
>>Thread.Terminate();

Попробуйте запустить такой код.

type
 TDefThread = class(TThread)
 public
   procedure Execute; override;
 end;

procedure TDefThread.Execute;
begin
while true do
begin
 sleep(100);
end;

end;

var
DT:TDefThread;
begin
DT:=TDefThread.Create(False);
DT.Suspend;
DT.Free;
Writeln("Выполнено");
end.

И сразу станет ясно зачем я в деструкторе запускаю остановленый поток. Но вместо Free вызывается Terminate. Т.к. в конструкторе у потока выставлено свойство FreeOnTerminate, то поток будет уничтожен при Terminate.


 
Сергей М. ©   (2006-10-19 09:47) [42]


> мне нужно чтобы ждало определённое время


Таймер + TryEnterCriticalSection()


> я использовал эвент...  Но он не позволяет захватить его дважды из одного потока


О "захвате" можно вести речь только в случае мьютекса и крит.секции.
С некоторой натяжкой можно говорить о "захвате" и в случае с семафором.
Но "захват" ивента - это нонсенс.


 
Priest ©   (2006-10-19 10:00) [43]

Таймер + TryEnterCriticalSection()

А не лучше ли Event+WaitForSingleObject. А таймер я прикрутил из-за безисходности. Так как в момент оповещения ком подписок, у меня происходит повисание на неопределённое время....Вот и происходят игры с бубном


 
Сергей М. ©   (2006-10-19 10:07) [44]


> не лучше ли Event+WaitForSingleObject


Нет, не лучше.
Если уж тебе потребовался аналог КС с фозможностью ограничения времени ее ожидания, то здесь сам собой напрашивается Mutex + [Msg]WaitFor[Single | Multiple]Object[s]

Мюьтекс кр.всего прочего позволит потоку В захватить себя, если поток А, захватив этот мьютекс ранее, "умер" не удосужившись его "отпустить" перед "смертью" (см. WAIT_ABANDONED)


 
evvcom ©   (2006-10-19 10:09) [45]

Мрак.

> procedure TDefault.SameMethod;
> var
> CS:TPxCriticalSection;
> begin
> CS:=TPxCriticalSection.Create("Sec");
> CS.Enter();
> sleep(60000);
> writeln("Эту строку не увидишь ТЫ!")
> end;

1. Секцию создаешь и забываешь о ней? Нехай о ней ось заботится. Да... подходец!
2. Потом из секции создаешь поток, один. Так что этой секцией пытаешься защитить?
3. Насколько я понял ты секцие назвал то, что называется Event? Нафига людей путать?

Ты или начни с примеров попроще, прочитав соответствующую литературу, или забудь про программирование вовсе.



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

Текущий архив: 2006.11.05;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.054 c
15-1160935733
Palladin
2006-10-15 22:08
2006.11.05
Are you dead yet!?


2-1161145215
ДьяволСД
2006-10-18 08:20
2006.11.05
gdiPlus.dll


15-1161320986
boalse
2006-10-20 09:09
2006.11.05
Законы Мерфи


2-1161167932
Priest
2006-10-18 14:38
2006.11.05
Как удалить объект из дочернего потока


2-1161079352
Dmitry_177
2006-10-17 14:02
2006.11.05
Присвоение одному массиву другого