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

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.53 MB
Время: 0.044 c
15-1161023303
Евгений Р.
2006-10-16 22:28
2006.11.05
Delphi 5


2-1161329602
stalcker666
2006-10-20 11:33
2006.11.05
Telnet


15-1161172512
Gero
2006-10-18 15:55
2006.11.05
Добавить запись об отменяемом действии в Memo


2-1161324932
Steep
2006-10-20 10:15
2006.11.05
Строки и потоки


6-1150353278
KirillSKTS
2006-06-15 10:34
2006.11.05
Accept, блокировка





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