Вниз
Скачать: CL | DM;

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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.009 c
2-1202866954
Буран
2008-02-13 04:42
2008.03.23
Как перевести на Си++ dll c TOleStream ?


15-1202736092
clickmaker
2008-02-11 16:21
2008.03.23
IContextMenu и AV


9-1168113997
!!!MISTIK!!!
2007-01-06 23:06
2008.03.23
Тени в GLScene


15-1202760185
NailMan
2008-02-11 23:03
2008.03.23
Есть ли сайты-базы для поиска по VenID/DevID?


15-1202477158
ПЛОВ
2008-02-08 16:25
2008.03.23
Есть ли уже подобное средство...




   Наверх