![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
WaitFor
Анонимщики © (2008-06-10 15:14:00)Прошу мастеров прокомментировать очевидность и правильность зависания:
program ThreadsDeadLocks_DEMO;
{$APPTYPE CONSOLE}
uses
SysUtils,
Classes;
type
TRapidThread = class(TThread)
protected
procedure Execute; override;
public
constructor Create(CreateSuspended: Boolean);
destructor Destroy; override;
end;
procedure TRapidThread.Execute;
begin
end;
constructor TRapidThread.Create(CreateSuspended: Boolean);
begin
inherited;
FreeOnTerminate := false;
end;
destructor TRapidThread.Destroy;
begin
WaitFor;
inherited;
end;
var
rt: TRapidThread;
begin
try
rt := TRapidThread.Create(true);
rt.Execute;
Sleep(3000);
// rt.WaitFor;
rt.Free;
except
on E:Exception do
Writeln(E.Classname, ': ', E.Message);
end;
end.
Сергей М. (2008-06-10 16:19:00) [1]
> прокомментировать очевидность и правильность зависания:
>
Где что у тебя висит - неочевидно и непонятно.
Зато очевидна и непонятна пустота в теле перекрытого метода Execute.
Очевидно и непонятно также присутствие явного вызова WaitFor в перекрытом деструкторе, в то время как этот же WaitFor присутствует в виртуальном деструкторе класса TThread
Поросенок Винни-Пух (2008-06-10 15:32:00) [2]в данном случае замена Execute на Resume абсолютно не играет конструктивной роли
А ничего, что то, что по замыслу должно выполняться во вторичном потоке вызвано из главного и в его контексте и выполняется?
:))
И нафига в таком разе вэйтфор?
Типа управление может волшебным образом перейти на следующую строчку еще до возврата из execute?
:))))
Анонимщики (2008-06-10 15:28:00) [3]Прошу прощения, вопрос снят
Анонимщики (2008-06-10 15:26:00) [4]в данном случае замена Execute на Resume абсолютно не играет конструктивной роли
Анонимщики (2008-06-10 15:25:00) [5]тьфу, Resume
Поросенок Винни-Пух (2008-06-10 15:23:00) [6]rt := TRapidThread.Create(true);
rt.Execute;
Чума!
DVM (2008-06-10 15:21:00) [7]resume Пушкин делать будет потоку.