Форум: "Начинающим";
Текущий архив: 2008.03.23;
Скачать: [xml.tar.bz2];
ВнизTCriticalSection Найти похожие ветки
← →
boba (2008-02-26 09:47) [0]В каких "не потоковых" случаях применяют TCriticalSection: например, в каких ситуациях он может понадобиться ещё?
У меня абсолютно безполезный пример ниже. Как на его работу будет сказываться TCriticalSection?
А если вместо записи в Memo, мне потребуется записывать данные в файл?TTimerDummyClass = class(TObject)
private
FTimer: TTimer;
FOnMyTimer: TGetStrProc;
procedure _OnTimer(Sender: TObject);
public
constructor Create;
destructor Destroy;
property OnMyTimer: TGetStrProc read FOnMyTimer write FOnMyTimer;
end;
{ TTimerDummyClass }
constructor TTimerDummyClass.Create;
begin
inherited;
FTimer := TTimer.Create(nil);
with FTimer do
begin
Interval := 1000 + Random(2000);
OnTimer := _OnTimer;
Enabled := True;
end;
end;
destructor TTimerDummyClass.Destroy;
begin
FTimer.Free;
inherited;
end;
procedure TTimerDummyClass._OnTimer(Sender: TObject);
begin
if Assigned(FOnMyTimer) then
FOnMyTimer(Format("Hello! Int = %d", [TTimer(Sender).Interval]));
TTimer(Sender).Enabled := False;
end;
procedure TForm1._OnMyTimer(const S: string);
begin
CriticalSection.Enter;
Memo1.Lines.Add(S);
CriticalSection.Leave;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
CriticalSection := TCriticalSection.Create;
end;
← →
boba (2008-02-26 09:49) [1]Забыл:
procedure TForm1.Button1Click(Sender: TObject);
var
ClassArr: array of TTimerDummyClass;
i: Integer;
begin
SetLength(ClassArr, 10);
for i := Low(ClassArr) to High(ClassArr) do
begin
ClassArr[i] := TTimerDummyClass.Create;
ClassArr[i].OnMyTimer := _OnMyTimer;
end;
end;
← →
Сергей М. © (2008-02-26 09:50) [2]
> В каких "не потоковых" случаях применяют TCriticalSection
Ни в каких. Исключительно в "потоковых", причем в контексте одного и того же текущего процесса.
← →
Сергей М. © (2008-02-26 09:51) [3]
> Как на его работу будет сказываться TCriticalSection?
Абсолютно никак.
← →
tesseract © (2008-02-26 09:52) [4]
> В каких "не потоковых" случаях применяют TCriticalSection:
> например, в каких ситуациях он может понадобиться ещё?
А зачем она в непотоковых ? Твой таймер должен из очереди срабатывать вообще-то.
И применяться она несколько не так :
CrtitialSection.Acquire;
try
finally
CriticalSection.Leave;
end;
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.03.23;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.005 c