Главная страница
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.55 MB
Время: 0.032 c
8-1137653425
ronyn
2006-01-19 09:50
2006.11.05
DS Pack прокрутка.


11-1137563827
L`Autour
2006-01-18 08:57
2006.11.05
CopyMoveFiles in KOL v2.22


4-1150349210
r@bbit
2006-06-15 09:26
2006.11.05
Как отличить виртуальный привод от реального?


8-1143548552
Nik2006
2006-03-28 16:22
2006.11.05
DSPack


2-1161529460
susergey
2006-10-22 19:04
2006.11.05
как из моей программы организовать отправку e-mail