Форум: "Начинающим";
Текущий архив: 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